This service is available only in Japanese-language.

devtool で FetchError: Recipe uses a floating tag/branch without a fixed SRCREV

いつもお世話になってます。

Compulab ボード用に Yocto/Kirkstone でイメージをビルドしてます。(https://github.com/compulab-yokneam/meta-bsp-imx8mp/blob/kirkstone-2.2.0...)。 ボードはucm-imx8m-plus SOM です。

bitbake linux-compulab

でビルドしていて、いくつかエラーがありましたが、それらを修正して今はエラーなしでビルドできています。イメージ全体(imx-image-multimedia)のビルドもエラーなくできます。そこで、devtoolを使用してソースの変更を行いたいのですが、

devtool modify linux-compulab

を行ってから、再び同じ:

bitbake linux-compulab

を行うと、長々とエラーが出ます。おそらくエラーのキモはこれではないかと思います:

bb.fetch2.FetchError: Fetcher failure: Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).

ググってみると同じような件がいくつかヒットしますが、解決方法がよくわかりません。
devtool reset linux-compulab で、devtoolの使用をやめると、再びビルドできるようになります。
何か解決策がありますでしょうか?

devtool modify を実行すると、workspaceというレイヤが生成され、workspace/appends 以下にbbappendファイルが生成され、workspace layer は、conf/bblayers.conf に追加されます。

この状態でbitbakeを実行すると、devtoolで使用するために生成されているbbappendも適用されてしまうため、上記のエラーが発生します。
devtool modify 実行後に、ソースコードの編集を行い、devtool build で構築を行い、devtool create-image でイメージの生成を行い修正内容の確認が行ったのち、いくつかの手順を実行して編集結果を保存します。
workspace以下に生成されたbbappendを最下部にコメントとして記載されていることから確認できますが、
workspace/source 以下のソースコードはlocalのgitの管理下に置かれています。
ソースコードが展開されたディレクトリに移動して
・git status
 を実行して、変更されたファイルを確認します。
・git add
で、変更を行ったファイルを登録します。
・git commit -m
を実行して、変更をcommit します。
ここまでの操作で、devtool modify実行時に展開されたソースツリーに対するpatch を生成する準備ができました。

devtool の finish サブコマンドを使用して、git commit で登録された差分(patch)及びbbappendを作成します。
finishサブコマンドでは、以下のオプションを付加することをお勧めします。
 -r (remove)
 -f (force)

丁寧な回答ありがとうございます。
devtool modify linux-compulab の直後に devtool build linux-compulab を実行しても全く同じエラーが出てしまいます。何か根本的に間違っているのでしょうか?

meta-bsp-imx8mp/recipes-kernel/linux/linux-compulab_5.15.71.inc の中で、
SRCREV = "${AUTOREV}"
という行があるので、これを他のハッシュに変えても同じようなエラーになります:
Exception: bb.fetch2.FetchError: Fetcher failure: Recipe uses a floating tag/branch '7888e7d' for repo 'github.com/compulab-yokneam/linux-compulab' without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).

とりあえず
BB_SRCREV_POLICY = "cache"
を local.conf に追加することで(fetchに行かなくなることで)問題を回避できました。workspaceを使っている間はこの設定で問題を回避して、workspaceの使用が終わった時点で、この行を削除するつもりです。
お世話になりました。

BB_SRCREV_POLICY の変数の説明は、https://docs.yoctoproject.org/ref-manual/index.html には記載されておらず見落としていました。
https://docs.yoctoproject.org/bitbake/2.2/index.html で確認すると、The BB_SRCREV_POLICY variable is useful when working without a network. と記載されていますね。
LOCAL_MIRRORを有効にして、BB_NO_NETWORK = "1" と指定した際に、AUTOREVとなっているソースはエラーとなっていましたが、BB_SRCREV_POLICY の値を設定することで、キャッシュされたデータを使用することができますね。

いつもお世話になる一方ですので、ほんのわずかでも貢献できたならばよかったです。
いまだに広大で深い Yocto の海で溺れてます・・・

BSP 供給元である Comopulab から解決策がきました。
linux-compulab_5.15.71.bbappend という Patch を recipes-devtool/linux/ にあてることで、上記の問題が解決しました。
Patch の内容は
SRCREV = "a665d8bd3ff24b1cb2fcf6300d7f95cc7bdb46cd"
LINUX_VERSION = "5.15.71-devtool"
です。

Patch がやっていることは何となく理解できますけど、SRCREV を hash に設定するというのは私も linux-compulab_5.15.71.inc の中で試してみたのですけどうまくいきませんでした。よくわからないけどビルドできるのでよし、ということにします。
お世話になりました。

上記のレシピ以外にも AUTOREV を使用している箇所があるようですけど、これはビルド(というかfetchですかね)する時間によって、結果が異なる可能性がある、ということでしょうか? Kirkstone 2.2.0 といっても、必ずしも同じビルド結果にならない可能性がある、ということでしょうか?
私どもの社内で何人かがビルドしているのですが、人によって、ビルドがうまくいったり行かなかったり、エラーもまちまちだったりすることがあります。

開発途中はAUTOREVの指定をおこなうことは良くありますが、リリース版を制定する場合は、最終的に動作確認をおこなったコミットで固定にするのが一般的となっています。

やはりそういうものなのですね。ありがとございました!