如何找到哪个 Yocto 项目配方填充图像根文件系统上的特定文件
How to find which Yocto Project recipe populates a particular file on an image root filesystem
我经常使用 Yocto 项目,一个常见的挑战是确定为什么(或从什么配方)文件被包含在 rootfs 中。这是可以从构建系统的环境、日志和元数据中派生出来的东西。理想情况下,一组命令将允许将文件链接回源(即食谱)。
我通常的策略是对元数据进行搜索(例如 grep -R filename ../layers/*
)并在互联网上搜索所述文件名以找到可能的负责任食谱的线索。然而,这并不总是非常有效。在许多情况下,文件名并未在配方中明确说明。此外,在许多情况下,文件名由多个配方提供,这会导致额外的工作来查找最终提供它的配方。当然还有许多其他线索可以找到答案。无论如何,当构建系统似乎应该有足够的信息来简单地解决答案时,这种调查通常是非常费力的。
每个recipe部署的候选文件放在每个$WORKDIR/image
所以你可以 cd 到
$ cd ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}
并执行
$ find . -path '*/image/*/fileYouAreLookingFor'
从结果中您应该能够推断出部署此类文件的配方的 ${PN}。
例如:
$ find . -path '*/image/*/mc'
./bash-completion/2.4-r0/image/usr/share/bash-completion/completions/mc
./mc/4.8.18-r0/image/usr/share/mc
./mc/4.8.18-r0/image/usr/bin/mc
./mc/4.8.18-r0/image/usr/libexec/mc
./mc/4.8.18-r0/image/etc/mc
如果您更喜欢图形表示,Toaster 网络 UI 也会向您显示此内容以及相关信息。
这是 oe-pkgdata-util
脚本及其子命令 find-path
的确切用例。该脚本是 openembedded-core.
的一部分
查看此示例(在 OE 构建环境中执行,即 bitbake
有效):
tom@pc:~/oe/build> oe-pkgdata-util find-path /lib/ld-2.24.so
glibc: /lib/ld-2.24.so
你可以清楚地看到这个库属于glibc recipe。
oe-pkgdata-util
有更多有用的子命令来查看有关包和配方的信息,值得检查 --help
.
我经常使用 Yocto 项目,一个常见的挑战是确定为什么(或从什么配方)文件被包含在 rootfs 中。这是可以从构建系统的环境、日志和元数据中派生出来的东西。理想情况下,一组命令将允许将文件链接回源(即食谱)。
我通常的策略是对元数据进行搜索(例如 grep -R filename ../layers/*
)并在互联网上搜索所述文件名以找到可能的负责任食谱的线索。然而,这并不总是非常有效。在许多情况下,文件名并未在配方中明确说明。此外,在许多情况下,文件名由多个配方提供,这会导致额外的工作来查找最终提供它的配方。当然还有许多其他线索可以找到答案。无论如何,当构建系统似乎应该有足够的信息来简单地解决答案时,这种调查通常是非常费力的。
每个recipe部署的候选文件放在每个$WORKDIR/image
所以你可以 cd 到
$ cd ${TMPDIR}/work/${MULTIMACH_TARGET_SYS}
并执行
$ find . -path '*/image/*/fileYouAreLookingFor'
从结果中您应该能够推断出部署此类文件的配方的 ${PN}。
例如:
$ find . -path '*/image/*/mc'
./bash-completion/2.4-r0/image/usr/share/bash-completion/completions/mc
./mc/4.8.18-r0/image/usr/share/mc
./mc/4.8.18-r0/image/usr/bin/mc
./mc/4.8.18-r0/image/usr/libexec/mc
./mc/4.8.18-r0/image/etc/mc
如果您更喜欢图形表示,Toaster 网络 UI 也会向您显示此内容以及相关信息。
这是 oe-pkgdata-util
脚本及其子命令 find-path
的确切用例。该脚本是 openembedded-core.
查看此示例(在 OE 构建环境中执行,即 bitbake
有效):
tom@pc:~/oe/build> oe-pkgdata-util find-path /lib/ld-2.24.so
glibc: /lib/ld-2.24.so
你可以清楚地看到这个库属于glibc recipe。
oe-pkgdata-util
有更多有用的子命令来查看有关包和配方的信息,值得检查 --help
.