This service is available only in Japanese-language.

レシピの記述方法に関する質問

二つほど質問があります

1)イメージ毎に内容の異なるファイルを選択するレシピの作成方法
eMMC起動用イメージとUSB起動用イメージで起動時にマウントするパーテションを変更したいのですが方法がよくわかりません。
eMMC起動用のfstabとUSB用のfstabを作成しbase-files_%.bbappendで分岐条件を記載すれば良いのでしょうか?(記載できるのでしょうか)
それもイメージレシピ側に分岐となる条件を記載すれば良いのでしょうか?
あるいはその両方が必要なのでしょうか?

現状はイメージ作成後にext4ファイルをマウントしてfstabを書き換えしております。

2)rootfsファイル(.ext4,.tar.bz2等)にデータを付加する方法
ファイルの整合性チェックのため、作成したrootfsファイルの末尾にmd5のバイナリデータを埋め込みたいのですが方法が判りません。
カーネルおよびデバイスツリーはdo_deploy_append()に付加処理を記述することで付加出来ましたが、イメージレシピにはdo_deployがなく、代わりにdo_image_ext4_appendおよびdo_image_tar_appendを作成しましたが、どうやら元のタスクが自動生成のようでrun.do_image_xxを確認しても処理が追加されていません。
どこか他に追加すべきタスクがあるのか?_appendの処理を追加する方法があるのか?教えていただければと思います。

実現方法はいろいろとありますが、以下の方法ではいかがでしょうか?
既存のbase-files レシピで提供されるfstabをbbappend を使用してインストールしないように変更する。
fstabのみ提供するレシピを2つ生成する。(eMMC起動用とusb起動用)
既存のイメージレシピをrequireで読み込む新規のイメージレシピを2つ作成し、異なったfstabを提供するレシピから生成されるパッケージをIMAGE_INSTALL変数に追加する。
上記の方法で、eMMC起動用とusb起動用の2つのイメージレシピを同時に生成も可能となります。
既存のイメージレシピをベースとした新規イメージレシピの作成は
https://git.yoctoproject.org/poky/tree/meta-skeleton/recipes-multilib/im...
が参考になります。

この方法で注意すべき点は、既存のbase-filesレシピで提供されていたfstabはインストールされなくなるため、他のイメージを作成する際には、fstabを提供するいずれかのレシピから生成されたパッケージを追加する必要があります。

UPDATE_ALTERNATIVEのメカニズムを使用して、base-filesに対するbbappenndにfstabを低い優先度で指定、fstabのみ提供するレシピの中では高い優先度でfstabを指定することで、よりスマートに実現することも可能です。
https://docs.yoctoproject.org/4.0.10/ref-manual/classes.html#update-alte...

返信ありがとうございました。
ご説明いただいた方法を試そうとしたのですが、既存のbase-filesのfstabをインストールしないようなbbappendの作成方法がわかりません。
既存レシピを確認するとCONFFILES_${PN}にも設定されているようでこの変数からの除去方法もわかりません。
参考になる情報がありましたらご教示お願いしたいと思います。

以下のような内容のbbappend を作成することで、base-filesのレシピから生成されるパッケージにfstabが含まれなくなることを確認しています。

1 CONFFILES:${PN}:remove = "${sysconfdir}/fstab"
2
3 do_install:append () {
4 rm -f ${D}${sysconfdir}/fstab
5 }

上記例の演算子は、Yocto3.4 以降で採用された新しい書式となります。
Yocto3.3より以前のバージョンをご利用の場合は、":" の代りに"_"で指定します。

1行目では、bbファイルで設定されたbasefilesパッケージ内のCONFFILES変数から、fstabを削除しています。
3行目から5行目で、do_install タスク実行後に追加で行う処理を記述しており、bbファイル内のdo_installで一旦installされたfstabを削除しています。

イメージ生成後の処理を追加する場合は
https://docs.yoctoproject.org/4.0.10/ref-manual/variables.html#term-IMAG...
で説明されているIMAGE-POSTPROCESS-COMMAND 変数に処理を記載することで実現できる可能性はあります。

返信ありがとうございます。
IMAGE-POSTPROCESS-COMMANDに処理を記載したところ希望のタイミングで呼び出しが行われました。
しかし、md5の付与に使用するツールが${WORKDIR}下にコピーされていないため処理自体は失敗しておりました。
個別のパッケージレシピ同様にSRC_URIを使えばレシピフォルダ下にあるツールが${WORKDIR}下にコピーされると思ったのですが、イメージレシピではSRC_URIは機能しないようです(fetchタスクが実行されないため?)
他の方法でツールを${WORKDIR}下に配置する方法があればご教示いただければと思います。

開発ホスト向けで、開発中に使用するツールとしてレシピ化を行い、使用予定のIMAGEレシピのDEPENDSに作成したnativeレシピを指定することで、IMAGEレシピの${WORKDIR}/recipes-sysroot-native/ 以下に配置され、実行可能になると考えます。