我正在构建一个Yocto图像。有一些仅在构建时需要的GPLv3库。我已经把GPLv3作为INCOMPATIBLE_LICENSE,并将构建时所需的库列入白名单。但是这些库会进入最终的图像。如何将它们限制在最终映像中,并仅在构建时使用它们?
如果我们考虑一下Yocto的基础知识,我们知道最终图像中的所有内容都是提供包的食谱集合,这些包被收集在一个根文件系统中。
那么,是什么让recipe进入最终的rootfs呢?
- 通过
IMAGE_INSTALL
添加。 - 被设置为另一个配方的
RDEPENDS
。
你需要深入分析,找出什么进入了你最终的rootfs。
同样,您可能会发现IMAGE_INSTALL
的内容不明显,运行:
bitbake -e <your_image_recipe> | grep ^IMAGE_INSTALL=
但是,您可能会看到一些packagegroups
被运送。packagegroup是一个在其他食谱列表上RDEPENDS
的组。
因此,您需要仔细分析它们(如果找到的话),看看是什么提供了您想要从rootfs中禁止的lib。
packagegroups
通常通过IMAGE_FEATURES
变量动态发送。
所以,这些是最重要的点,负责将配方发送到根节点。所以,分析你想要的配方。
- 这是另一个配方的
RDEPENDS
吗? - 查找它被调用的确切位置。
从do_install任务中删除lib的安装,通过在配方中添加类似的东西,例如gdb,如您所说
do_install:append()
{
#删除不希望加载到image中的lib
}
并确保相同的库没有添加到recipe
中的FILES var中。e。文件:${PN} += "<"自由",
PACKAGE_EXCLUDE对我有效。如果PACKAGE_EXCLUDE下列出的包正在进入最终映像,那么这将引发一个错误。此外,如果任何其他包在运行时依赖于PACKAGE_EXCLUDE下列出的包,那么这也会引发错误。
引用:https://docs.yoctoproject.org/ref-manual/variables.html#term-PACKAGE_EXCLUDEhttps://git.yoctoproject.org/poky/tree/meta/conf/documentation.conf n313