我正在尝试使用基于OpenEmbedded的Arago构建并部署到rootfs中的软件包.不幸的是,软件包包括预构建的共享库.据我所知,Arago构建了整个Linux发行版--hash-style=gnu,而我建议使用这些共享库--hash-style=sysv,我怀疑.至少构建在"ELF二进制文件中没有GNU_HASH"QA问题中停止.
我明白什么是哈希.但我想我不明白它们在系统运行时是如何被使用的.
为什么系统中的所有ELF都需要一个哈希样式?为什么动态链接器不能动态确定哈希样式而只是使用它?
我的应用程序的makefile为CFLAGS添加了几个东西,如下所示:
CFLAGS += -Wall -std=gnu99
Run Code Online (Sandbox Code Playgroud)
但是当我使用OpenEmbedded BitBake构建应用程序时,BitBake显然忽略了makefile中的CFLAGS变量.
我发现在应用程序的配方中添加以下行会导致在构建期间通过BitBake使用标志:
EXTRA_OEMAKE += "CFLAGS='-Wall -std=gnu99'"
Run Code Online (Sandbox Code Playgroud)
为什么BitBake会忽略makefile中的CFLAGS?此外,是否有比将上述线添加到配方更好的解决方案?
我更喜欢使用makefile的CFLAGS来消除冗余.
我是该领域的新手,所以我的术语可能不正确。
我的目标是为配备了Texas Instruments AM335x ARM处理器的嵌入式设备构建自定义linux发行版。
我在Yocto 1.6.1(雏菊发行版),bitbake和HOB(初学者的总寿命)上玩了一点。
之后,我发现了德州仪器(TI)的Arago项目快速入门。看起来它根本不需要Yocto文件,而是重新下载bitbake,meta-openembedded层和新的meta-linaro层(我从未听说过)。
据我了解,我需要meta-ti层来构建AM335x。我可以将其复制到其他Yocto图层中,然后仅将其与Poky“一起使用”吗?
如果使用Arago进行构建,是否可以使用HOB和其他Yocto层?
Yocto / Poky和Arago有什么区别?它们在某种程度上兼容吗?Arago是否支持使用qemu运行图像?
我想通过使用某种递归安装例程而不是多次调用 install 来简化安装大型目录结构的 BitBake 配方。源目录布局在开发过程中经常发生变化,这导致配方修订比我想要处理的要多得多。
例如,以下 do_install() 将如何简化:
do_install() {
install -d ${D}/foo
install -m 0644 ${S}/foo/*.* ${D}/foo
install -d ${D}/foo/a
install -m 0644 ${S}/foo/a/*.* ${D}/foo/a
install -d ${D}/foo/b
install -m 0644 ${S}/foo/b/*.* ${D}/foo/b
install -d ${D}/foo/c
install -m 0644 ${S}/foo/c/*.* ${D}/foo/c
install -d ${D}/bar
install -m 0644 ${S}/bar/*.* ${D}/bar
install -d ${D}/bar/a
install -m 0644 ${S}/bar/a/*.* ${D}/bar/a
install -d ${D}/bar/a/bananas
install -m 0644 ${S}/bar/a/bananas/*.* ${D}/bar/a/bananas
}
Run Code Online (Sandbox Code Playgroud)
更像这个伪代码的东西:
do_install() {
for each subdir in ${S}/foo/
install subdir recursively to ${D}/foo/subdir …Run Code Online (Sandbox Code Playgroud) 我们如何向sysroot目录中添加一些其他内核文件?我想扩展do_populate_sysroot任务,我们如何才能在之后do_populate_sysroot和之前将更多文件复制到sysroot中do_package?我试图do_populate_sysroot_append()在配方中创建,但是它正在解析错误。populate_sysroot在do_package任务开始之前和之后,我们如何在sysroot中添加文件?我们如何在两者之间创建新任务?
如何在yocto项目中为我的映像安装命令locale和localedef?我尝试了以下方法:
IMAGE_INSTALL_append = " glibc-locale"
Run Code Online (Sandbox Code Playgroud)
但这行不通。我该怎么做?
语境:
我正在按照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) 我正在创建一个基于 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)
我能做些什么?