web-dev-qa-db-ja.com

どのYocto Projectレシピがイメージルートファイルシステムの特定のファイルを作成するかを見つける方法

私はYocto Projectでかなり作業していますが、よくある課題は、なぜ(またはどのレシピから)ファイルがrootfsに含まれているのかを判断することです。これは、うまくいけば、ビルドシステムの環境、ログ、メタデータから派生できるものです。理想的には、一連のコマンドにより、ファイルをソース(つまり、レシピ)にリンクし直すことができます。

私の通常の戦略は、メタデータ(例:grep -R filename ../layers/*)そして、インターネット上で上記のファイル名を検索して、考えられる責任のあるレシピの手がかりを見つけます。ただし、これは必ずしも非常に効果的ではありません。多くの場合、ファイル名はレシピ内で明示的に述べられていません。さらに、ファイル名が複数のレシピによって提供される場合が多く、最終的にそれを提供するレシピを見つけるための追加の作業につながります。もちろん、答えを見つけるために利用できる他の多くの手がかりがあります。とにかく、この調査は、答えを簡単に解決するのに十分な情報がビルドシステムに必要であると思われる場合、多くの場合かなり手間がかかります。

17
shibley

これは、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レシピに属していることがはっきりとわかります。

oe-pkgdata-utilには、パッケージとレシピに関する情報を表示するためのより便利なサブコマンドがあります。--helpを確認してください。

25
Tomas Novotny

グラフィカルな表示が必要な場合は、Toaster Web UIにこれと依存関係情報も表示されます。

3
belen

各レシピにデプロイされた候補ファイルは、各$ 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
1
urnenfeld