我正在尝试构建 OpenWebOS,并遵循build-webos GitHub README中列出的计划。我正在使用全新的 32 位 Ubuntu 12.10 安装。事情有点坎坷。
然而,通过这里和那里的调整,我设法在出错之前达到 2500 步中的 350 步或(或其他)。问题是构建 glibc 的依赖性,它抱怨
(...)/sysdeps/i386/start.S:107: undefined reference to `__libc_csu_fini'
(...)/sysdeps/i386/start.S:108: undefined reference to `__libc_csu_init'
Run Code Online (Sandbox Code Playgroud)
在网上搜索发现,人们在不构建 glibc 本身时发生这种情况的各种情况:
ld 抱怨:在函数“_start”中,对“__libc_csu_fini”和“__libc_csu_init”的未定义引用
直接使用 ld 链接 C 程序失败,未定义对“__libc_csu_fini”的引用
但这是在构建自定义嵌入式 LIBC 期间:eglibc。所以有点不同,我能找到的最接近的案例是OpenEmbedded 列表上的这个 2009 年线程。我不知道如何在 WebOS 构建结构的令人困惑的充满“bakefile”的宇宙中将他们的补丁付诸实践,这是令人眼花缭乱的奇怪。
失败的命令行怪物我将“简化”为以下内容:
gcc -m32 -march = i586 --sysroot = / home / webos / build-webos / BUILD-qemux86 / sysroots / qemux86-tcbootstrap -nostdlib -nostartfiles -o iconv / iconvconfig -Wl,-dynamic-linker = / lib / ld …
systemd我用和构建了一个图像dhcp-client。在配方中dhcp有meta-openembedded/meta-systemd/oe-core/recipes-connectivity/dhcp一个 bbappend 创建 dhclient.service。我想修改(或覆盖)这个文件,但是当我启动 bitbake 时,我有一个错误告诉我Applying patch 0001-dhclient-modify-interface.patch can't find file to patch at input line 5。
这是我的 dhclient.service 补丁:
Index: 4.3.3-r0/dhclient.service
===================================================================
--- 4.3.3-r0.orig/dhclient.service
+++ 4.3.3-r0/dhclient.service
@@ -6,7 +6,7 @@ After=syslog.target network.target
Type=forking
PIDFile=/var/run/dhclient.pid
EnvironmentFile=-/etc/default/dhcp-client
-ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases $INTERFACES
+ExecStart=/sbin/dhclient -cf /etc/dhcp/dhclient.conf -q -lf /var/lib/dhcp/dhclient.leases eth0
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
还有我的 dhcp_%.bbappend :
FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:"
SRC_URI += "file://dhclient.service"
Run Code Online (Sandbox Code Playgroud)
我也尝试覆盖该文件,但它似乎完全忽略我的文件......
我想默认启用此功能,但如何覆盖此 ligne(存在于 dhcp 文件夹中)以enable:SYSTEMD_AUTO_ENABLE_dhcp-client = "disable"
语境:
我正在按照NXP i.MX7 参考为 i.MX 7 SABRE 板构建 Linux 映像。这个过程很顺利,我成功地在板上构建并加载了 krogoth 图像。当我尝试将openembedded-core层添加到我的图像时出现问题。我立即收到以下错误。我包含了我的bblayers.conf以供参考。任何帮助,将不胜感激。我什至不需要sqlite,所以如果有办法绕过它,那就没问题了。
错误:
ERROR: ExpansionError during parsing /fsl-community-bsp-platform/sources/openembedded-core/meta/recipes-support/sqlite/sqlite3_3.16.2.bb: Failure expanding variable SQLITE_PV, expression was ${@sqlite_download_version(d)} which triggered exception TypeError: getVar() takes at least 3 arguments (2 given)
Run Code Online (Sandbox Code Playgroud)
bblayers.conf
POKY_BBLAYERS_CONF_VERSION = "2"
BBPATH = "${TOPDIR}"
BSPDIR := "${@os.path.abspath(os.path.dirname(d.getVar('FILE', True)) + '/../..')}"
BBFILES ?= ""
BBLAYERS = " \
${BSPDIR}/sources/poky/meta \
${BSPDIR}/sources/poky/meta-poky \
\
${BSPDIR}/sources/openembedded-core/meta \
\
${BSPDIR}/sources/meta-openembedded/meta-oe \
${BSPDIR}/sources/meta-openembedded/meta-multimedia \
\
${BSPDIR}/sources/meta-fsl-arm \
${BSPDIR}/sources/meta-fsl-arm-extra \ …Run Code Online (Sandbox Code Playgroud) 我想重写配方 (bb) 中从 bbclass 继承的函数,但它不起作用 - 执行 bbclass(超类)的函数而不是新函数。
这是一个最小的(非)工作示例。
班级:
# myclass.bbclass
do_compile() {
echo MyClass
}
Run Code Online (Sandbox Code Playgroud)
食谱:
# myrecipe.bb
do_compile() {
echo MyRecipe
}
inherit myclass
Run Code Online (Sandbox Code Playgroud)
编译配方后,日志文件如下所示:
$ cat temp/log.do_compile
DEBUG: Executing shell function do_compile
MyClass
DEBUG: Shell function do_compile finished
Run Code Online (Sandbox Code Playgroud)
为什么不覆盖do_compile工作?
我有一个配方,我想阻止为目标构建该配方。
据我所知,给定一个配方xyz.bb,添加BBCLASSEXTEND += " native nativesdk"“神奇”可以实现以下所有功能:
$ bitbake xyz # 1
$ bitbake nativesdk-xyz # 2
$ bitbake xyz-native # 3
Run Code Online (Sandbox Code Playgroud)
我只想要数字 2 和 3。我明确不希望数字 #1 成为可能(可能xyz有 GPL v3 许可证,所以我从不希望它出现在目标图像中)
我尝试命名配方xyz-native.bb并添加BBCLASSEXTEND += " nativesdk",但这产生了可构建的目标,如下所示。
$ bitbake xyz-native # which is what I want
$ bitbake nativesdk-xyz-native # which is NOT what I want
Run Code Online (Sandbox Code Playgroud)
我能看到的唯一其他选项是重命名xyz.bb为xyz.inc,然后创建nativesdk-xyz.bband xyz-native.bb,两者都只需要通用xyz.inc文件。
我缺少什么?
我正在创建一个基于 x86 的非常简单的 Yocto 图像。
我希望 / 文件系统是只读的,所以我设置了
IMAGE_FEATURES_append = " read-only-rootfs "
Run Code Online (Sandbox Code Playgroud)
在原件的自定义副本中core-image-minimal.bb。不过,我确实希望将/home可写的放在一个单独的分区上。
所以,我添加了一行
part /home --ondisk sda --fstype=ext4 --label home --align 1024 --size 600
Run Code Online (Sandbox Code Playgroud)
在 genericx86.wks 中。这会/home在最终 wic 映像中创建实际分区,但它自然不保存任何数据,因为没有对应的数据rootfs。这会导致启动后出现以下非常预期的消息:No directory, logging in with HOME=/.
互联网上关于这方面的信息令人惊讶地很少。有这样的解释:
创建或修改构建配方来为每个分区准备一个 rootfs 目录要简单得多。
我只是希望文档或示例中有任何关于如何实现这一目标的参考。
我可以看到分区由 python 脚本(插件)填充,例如rootfs.py,并且IMAGE_ROOTFS_SIZE在提到的图像配方文件中指定了图像参数,例如genericx86.wks,但这不足以让我将这些部分连接在一起。
我已经阅读了创建分区图像使用 wic和链接的openembedded kickstart手册,那里没有任何线索。
感谢某人的善意帮助。
对驱动程序源代码进行一些修改后如何重建映像?
我已经尝试过 bitbake -f -c 编译和 bitbake 但我无法在驱动程序中找到修改的设置。有人可以告诉我如何使用修改后的代码重建图像。
我创建了一个食谱,摘要如下:
do_install() {
install -d ${D}/GreenTea
cp ${S}/foo.sh ${D}/GreenTea
cp ${S}/foo.so ${D}/GreenTea
Run Code Online (Sandbox Code Playgroud)
当bitbake这个食谱时,它显示:没有通过LDFLAGS?[ld标志]
ERROR: greentea-1.0-r0 do_package_qa: QA Issue: No GNU_HASH in the ELF binary /home/tea/greentea4/build/tmp/work/corei7-64-poky-linux/greentea/1.0-r0/packages-split/greentea/GreenTea/foo.so, didn't pass LDFLAGS? [ldflags]
Run Code Online (Sandbox Code Playgroud)
我能做些什么?
看完一些视频/会议,阅读文档......我仍然无法确定哪个更好:OpenEmbedded或Yocto用于构建自己的实时发行版(更好的是说linux内核).
我正在进行的项目是有时间限制的(我可以忍受将近一个月的时间来使发行版在目标上工作,稍后将添加一些外围设备).所以我不想在以后沮丧,我要求你根据自己的经验估计趋势,以及在我的专业经验中可能给我更多的价值.
我的目标是NI MyRIO板,系统主要目标是管理传感器网络.
提前致谢 ;)
即使我阅读了手册,我也很难理解FILES _ $ {PN}.例如,我正在研究制作启动脚本的这个例子.在我写了类似的东西之后,我收到了这些错误消息.
ERROR: initscriptd-1.0-r0 do_package: QA Issue: initscriptd: Files/directories were installed but not shipped in any package:
/usr
/usr/sbin
Please set FILES such that these items are packaged. Alternatively if they are unneeded, avoid installing them or delete them within do_install.
initscriptd: 2 installed and not shipped files. [installed-vs-shipped]
ERROR: initscriptd-1.0-r0 do_package: Fatal QA errors found, failing task.
ERROR: initscriptd-1.0-r0 do_package: Function failed: do_package
ERROR: Logfile of failure stored in: /home/yahia/Desktop/elinux_dev/bake_factory/poky-pyro-17.0.1/build/tmp/work/core2-64-poky-linux/initscriptd/1.0-r0/temp/log.do_package.5252
ERROR: Task (/home/yahia/Desktop/elinux_dev/bake_factory/poky-pyro-17.0.1/meta-mylayer/recipes-core/mylayer-initscript/initscriptd.bb:do_package) failed with …Run Code Online (Sandbox Code Playgroud)