yocto v1.7.1 "dizzy" をセットアップして、ローカルの git リポジトリにチェックインされたカスタマイズされた Linux カーネル リビジョンからカスタム Linux イメージをビルドしています。
ビルド プロセスを実行するdo_validate_branches()
と、次のエラー メッセージが表示されて失敗します。
DEBUG: Executing shell function do_validate_branches
usage: git cat-file (-t|-s|-e|-p|<type>|--textconv) <object>
or: git cat-file (--batch|--batch-check) < <list_of_objects>
<type> can be one of: blob, tree, commit, tag
-t show object type
-s show object size
-e exit with zero when there's no error
-p pretty-print object's content
--textconv for blob objects, run textconv on object's content
--batch[=<format>] show info and content of objects fed from the standard input
--batch-check[=<format>]
show info about objects fed from the standard input
ERROR: is not a valid commit ID.
ERROR: The kernel source tree may be out of sync
WARNING: exit code 1 from a shell command.
ERROR: Function failed: do_validate_branches (log file is located at etc..)
do_validate_branches に対して生成されたコードを見ると、問題は を呼び出しているためと思われますgit cat-file -t ${machine_srcrev}
が${machine_srcrev}
、空の文字列です。さらに、これはlinux-yocto-custom.bbで次を使用しているためと思われます
SRCREV="${AUTOREV}"
リビジョン番号に置き換えると、次のような問題が発生しなくなるため...
SRCREV="7035c2a67d964acbb5d917f470bcda42691a3d9c"
問題は、実際にはこのレシピをブランチの HEAD からビルドすることです。そのため、特定のリビジョンを配置することは、私が求めているものではなく、SRCREV="${AUTOREV}"
実際に必要なもののように思われます。しかし、上で述べたように、これは、評価されるべきだと思うので${SRCREV_machine}
はなく、空の文字列になります。AUTOINC
SRCREV
正しいものを含むようにレシピを常に更新し、それを通過させることなく、レシピを頭に従うようにする方法について、誰かが私に洞察を提供できますdo_validate_branches()
か? ここで何が欠けていますか?
編集:詳細...
kernel-yocto.bbclassを次のように変更すると、この問題も修正されるようです... @285
- machine_srcrev="${SRCREV_machine}"
+ machine_srcrev="${@ get_machine_branch(d, "${SRCREV}" )}"
私の変更についての私の理解は$SRCREV
、マシンブランチから明示的に再取得するようにしていることです。オリジナルが考えているように見えるものは、すでに に保存されてい${SRCREV_machine}
ます。元の結果は空の文字列になり、私の変更はAUTOINC
.
基本クラスを編集する必要はないはずなので、まだ何かが足りないと思います。しかし、私はこれがバグであるというよりも、何かが欠けていると考える傾向があります。おそらく、これを yocto メーリング リストのどこかに投稿する必要があります。