Yoctoレシピを書く(.bb・レイヤ)
Yoctoの本当の力は「自分のソフトを組込みイメージに組み込む」ところで発揮されます。その設計図がレシピ(.bb ファイル)です。ここでは1本のソフトの取得元・ライセンス・ビルド手順・インストール先をレシピにどう書くか、自作レイヤ meta-mylayer をどう作って自分の変更をきれいに分離するか、既存レシピを上書きする bbappend までを学びます。最初の一歩は、画面に文字を出すだけの hello を1本、自力でイメージに乗せることです。
Yocto でイメージを一度ビルドできても、そこに「自分のソフト」を1本も乗せられなければ半人前だ。既製品を組み合わせるだけでなく、自作物を組込みイメージに載せる——そこからが本番になる。
その鍵がレシピ(bs-recipe)だ。レシピとは、ある1つのソフトについて「どこから取ってきて、どう作って、どこに置くか」を書いた設計図で、ファイル名は .bb で終わる。
最初は .bb の中身が呪文のように見えるかもしれない。だが書いてあることは案外シンプルで、「取得元・ライセンス・ビルド手順・インストール手順」の4点にほぼ集約される。
📄 レシピ(.bb)=1ソフトの作り方
1つの .bb ファイルは、原則として1つのソフトウェアに対応する。curl のレシピ、自作アプリのレシピ、というように、ソフトごとに設計図が1枚ずつある。
レシピの先頭では、そのソフトの説明とライセンスを宣言する。LICENSE 行は必須で、Yocto はここが空だとビルドを止める。素性の分からないものを混ぜない、という組込みの規律がここに表れている。
SRC_URI は、ソースの取得元を書く行だ。ネット上の tarball の URL、git リポジトリ、あるいは自分のレシピの隣に置いたファイルを file:// で指すこともできる。
🛠️ do_compile と do_install
レシピの中身のうち、実際の作業を書くのが do_ で始まる関数群だ。中でも要になるのが、ソースをビルドする do_compile と、成果物を置き場所へ収める do_install の2つになる。
do_compile には「どうビルドするか」を書く。多くのソフトは Makefile や configure を持つので、Yocto 側の定型クラスを継承すれば、この関数を自分で書かずに済むことも多い。単純な hello なら数行で足りる。
do_install には「作ったものをどこへ置くか」を書く。ここで置き先に指すのは、実機の / ではなく ${D} という一時的な組み立て場所だ。この ${D} の中身が、最終的に rootfs へと畳み込まれる。
🧱 自作レイヤ meta-mylayer
自分のレシピを、Yocto 本体のフォルダに直接置いてはいけない。混ざってしまい、更新のときに衝突するからだ。自作物は自分専用の区画にまとめる。その区画がレイヤ(bs-layer)だ。
レイヤは bitbake-layers create-layer で雛形を生成できる。慣習として名前は meta- で始め、たとえば meta-mylayer とする。中には conf・recipes- といった決まった構造ができる。
作っただけではビルド対象にならない。add-layer で登録して初めて、bitbake がそのレイヤの中のレシピを認識する。「作る」と「登録する」は別の一手だと覚えておく。
📥 IMAGE_INSTALL でイメージに乗せる
レシピを書き、レイヤに置き、登録した。しかしそれだけでは、そのソフトはまだイメージに入らない。「このソフトをイメージに含めよ」と別途指示する必要がある。
その指示が IMAGE_INSTALL だ。イメージ側の設定で IMAGE_INSTALL:append = " hello" のように書き足すと、hello レシピの成果物が rootfs に組み込まれる。先頭の空白は区切りのためで、省くと前の語とくっつく。
🩹 bbappend で既製レシピを上書き
既存のレシピを、丸ごとコピーせずに一部だけ変えたいことがある。設定を1行足す、パッチを当てる、といった小さな上書きだ。これには bbappend(bs-bbappend)を使う。
元レシピが foo_1.0.bb なら、自分のレイヤに foo_%.bbappend という名前のファイルを置く。すると Yocto は元レシピの上に、この追記分を重ねて解釈する。元には一切手を触れない。
🚑 手早く試す devtool
レシピをゼロから手書きするのは骨が折れる。そこで devtool という補助ツールがある。既存のソースから雛形レシピを自動生成したり、ビルドの試行錯誤を対話的に回したりできる。
たとえば devtool add にソースを渡すと、SRC_URI や依存の当たりを付けたレシピの下書きを作ってくれる。まずこれを叩き台にして、手で整えていくと早い。
🎯 最初は hello 1本
ここまでの要素を全部いっぺんに使う必要はない。最初の目標は、画面に文字を出すだけの hello を1本、自作レイヤのレシピとして書き、IMAGE_INSTALL に足して、実機で走らせることだ。
この hello が動いた瞬間、SRC_URI・do_compile・do_install・レイヤ登録・IMAGE_INSTALL という一連の流れが全部つながって腑に落ちる。あとは中身を本物のアプリに差し替えていくだけだ。