web-dev-qa-db-ja.com

ビットベイクでの変数割り当ての追跡

Bitbake/openembeddedを使用していますが、パス変数が正しく設定されていないため、レシピが失敗すると思います。具体的には、SRC_URIにファイルを追加していますが、エラーは、ファイルのコピーが間違ったパスを使用して行われたことを示しています。したがって、

1)file://プロトコルを使用するときに使用される「現在の」パス変数を確認するにはどうすればよいですか?

2)ファイルの検索に使用されている変数を何らかの方法で確認した場合、依存関係グラフでその変数への割り当てを追跡できますか?つまり、bitbakeは、エラーを見つけるために調べたいレシピファイルのセットで、変数への追加/追加に何らかの順序で遭遇する必要があります。

ボーナスの質問:レシピのエラーを検出するための現在の「デバッグ方法」は原始的すぎると思います(たとえば、コマンドラインに-D -D -Dを追加し、その後、出力の山を通り抜けてヒントを探します) )。 「専門家」はどのようにビットベイクレシピをデバッグしますか?

更新:レシピをデバッグするためのはるかに優れた方法を見つけました:

特定のレシピの「フェッチ」タスクが正常に完了した後、レシピの作業フォルダーが作成されることがわかりました。このフォルダー内には、実行されたコード(run.do_fetch。######など)とレシピ内の各タスクの結果(log._do_fetch。######など)を含む「temp」サブフォルダーがあります。 。

「run .. ###」ファイルを調べると、変数の正確な値と、タスクに対して実行された正確なコマンド/ Python関数がわかります。特定の「実行」の出力は、「実行」ファイルと同じID /番号で「log .. ###」ファイルに保存されます。どういうわけか、この非常に基本的な情報は、マニュアルを読んでいる間は登録されませんでしたが、レシピが失敗したときは常に「temp」フォルダーを調べます。

12
S.C. Madsen

bitbake -eを発見したと思いますよね?これにより、単一のビットベイク「ターゲット」(つまりレシピ)に固有の環境がダンプされます。FILESPATHは、ビットベイクがfile://SRC_URIコンポーネントで指定されたファイルを検索するために使用する重要な変数であると思います。 bitbake -e (recipe) | grep ^FILESPATH=を使用すると、その非常に大きなパス変数が表示されます。

その変数への割り当てを追跡する方法はわかりませんが、変更する方法はいくつかあります。 (実際には、bitbake -eの出力にどのファイルがどの変数を変更したかを注釈するビットベイクパ​​ッチを思い出しますが、詳細を思い出せません。oeリストで質問してください。)いずれにせよ、上のgrepから=記号を削除した場合FILESPATHを変更できる他の方法を見ることができます。これはさまざまなドキュメントでもカバーされていると思います。

最後に、ここのstackoverflowではなく、 openembeddedメーリングリスト で質問する方が幸運かもしれません。

bitbake -eとログファイル(${WORKDIR}/tempにあります)は、最高のデバッグツールです。 (ビットベイク関連のユースケースについては、ack-grepもチェックしてください。grepよりも優れています。)WORKDIRはどこにありますか?

bitbake -e (recipe) | grep ^WORKDIR=

WORKDIRに慣れると、パターンが表示され、そのように見つける必要がなくなります。

ハッピーベーキング! ;)

16
challinan

インタラクティブモードでToasterを使用することをお勧めします。構成ページでは、変数の割り当て履歴を追跡できます。

モックアップはここにあります: https://www.yoctoproject.org/toaster/build-configuration.html

これを使用するには、「sourceoe-init-build-env」の後に「sourcetoasterstart」を実行すると、Webインターフェイスでビルドからログに記録されたデータが表示されます。

これがお役に立てば幸いです、アレックス

0
ddalex

BitBakeの新しいバージョンでこれを行うためのパッチがあることが判明しましたが、現在使用しているバージョンではサポートされていません:-(

0
S.C. Madsen