🐧 Linux 総合学習プラットフォーム
組込みビルド Yocto/Buildroot ・ 上級

Buildrootをカスタマイズする

Buildrootで最小イメージを作れるようになったら、次は「自分の欲しい形」に仕立てる番です。ここでは make menuconfig でパッケージやオプションをカタログから選び、その選択を defconfig として保存して再現する方法、rootfs へ好きなファイルを差し込む overlay、ビルド最後に走る post-build スクリプトまでを扱います。合言葉は「選ぶ→焼く→試す」。この小さな輪を何周も回すのが、組込みイメージ作りの本体です。

Buildroot で最小イメージを一度でも作れたなら、もう仕組みの半分は手に入っている。残りは「自分の欲しい部品を足し、余計なものを削り、その形を保存して何度でも再現する」ことだ。

最初のうちは、パッケージを1つ足すたびに手順を思い出せず、うまくいった設定も次の日には再現できない——これがよくあるつまずきだ。だが Buildroot はこの悩みに、はっきりした答えを用意している。

答えは2つの道具に集約される。設定を対話的に選ぶ make menuconfig と、選んだ結果を1枚のファイルに畳んで保存する defconfig だ。この2つを行き来するのが、カスタマイズの背骨になる。

🔗
たとえmenuconfig は「レストランのメニューから料理にチェックを入れる」作業、defconfig は「そのときの注文票を1枚に書き出して保存する」ことだ。次回は注文票を出せば、まったく同じ食事がまた出てくる。

🗂️ カタログから選ぶ make menuconfig

Buildroot のトップフォルダで make menuconfig を実行すると、青い画面のメニューが開く。ここが「何を作るか」を決めるカタログだ。

メニューは階層になっている。ターゲットCPUの種類、ツールチェイン、ブートローダ、カーネル、そして山ほどのユーザー空間パッケージが、フォルダのように枝分かれして並ぶ。

矢印キーで項目を移動し、スペースキーで on/off を切り替える。Enter でサブメニューに入り、Esc を2回で戻る。目当ての項目が探せないときは、スラッシュ / で検索できる。

💡
ポイントmenuconfig の操作は「矢印で動く・スペースで選ぶ・スラッシュで探す」の3つを覚えれば足りる。まずは既存の defconfig を読み込んでから、そこに少しずつ足していくのが安全だ。
カタログ画面make menuconfig選ぶ / 外す作業中の設定.config畳んで保存savedefconfig= 注文票次回はここから再現できる

💾 選んだ結果を保存する defconfig

menuconfig で選んだ内容は、その場では .config という作業ファイルに書かれる。ただしこれは中間ファイルで、大きく雑然としていて、そのまま保管するには向かない。

そこで make savedefconfig を実行する。すると「初期値から変えた項目だけ」を抜き出した、短くて読みやすい設定ファイルが得られる。これが defconfig(デフォルト設定)だ。

$ make savedefconfig BR2_DEFCONFIG=configs/myboard_defconfig (変更点だけを configs/myboard_defconfig に書き出す)

この defconfig をプロジェクトに保存しておけば、別のマシンでも make myboard_defconfig の一発で同じ設定を呼び戻せる。再現性は defconfig が担保する。

つまずき保管すべきは .config ではなく defconfig の方だ。.config は自動生成物なので、消えても defconfig から作り直せる。逆に defconfig を失うと、苦労した選択がまるごと消える。

📦 パッケージを足す BR2_PACKAGE_*

menuconfig で選ぶ各パッケージには、内部的に BR2_PACKAGE_ で始まる名前が付いている。たとえば軽量ツール群の BusyBox なら BR2_PACKAGE_BUSYBOX という具合だ。

画面で項目にカーソルを合わせて h(ヘルプ)を押すと、その項目に対応する BR2_PACKAGE_ 名や依存関係の説明が読める。何を有効にしたか記録したいとき、この名前が手がかりになる。

コツ欲しいツールが見つからないときは、menuconfig 内をスラッシュ検索でパッケージ名を探す。多くの定番ツールは Buildroot に最初から用意されており、チェックを入れるだけで組み込める。

📁 ファイルを差し込む rootfs overlay

パッケージ選択では表現できないものもある。自分で書いた設定ファイル、起動スクリプト、初期データなどを、完成した rootfs の決まった場所に置きたい場面だ。

そのための仕組みが rootfs overlay(ルートFSオーバーレイ)だ。あるフォルダを「重ね焼きの型」として指定すると、その中身がそっくりそのまま rootfs の同じ構造にコピーされる。

🔗
たとえoverlay は「焼き上がったケーキの上に、決まった位置でトッピングを乗せる型紙」だ。board/myboard/overlay/etc/myapp.conf を置けば、rootfs の /etc/myapp.conf として現れる。

menuconfig の System configuration にある Root filesystem overlay directories に、この overlay フォルダのパスを指定する。複数指定もできる。

overlay フォルダoverlay/etc/myapp.confetc/init.d/S99app置きたいファイル群重ねる完成した rootfs/bin /lib /usr .../etc/myapp.conf ✓/etc/init.d/S99app ✓同じ場所に現れる

🔧 仕上げの post-build スクリプト

ビルドの最後、イメージに固める直前に「あと一手だけ加えたい」ことがある。バージョン文字列を書き込む、不要ファイルを消す、権限を直す、といった細かな仕上げだ。

これを担うのが post-build スクリプト(ビルド後スクリプト)だ。menuconfig の System configuration にある Custom scripts to run before creating filesystem images でスクリプトを指定できる。

post-build スクリプトには、rootfs のパスが第1引数として渡ってくる。だからスクリプト内では、そのパスを起点に $1/etc/... のようにファイルを触れる。overlay が「置く」係なら、post-build は「加工する」係だ。

つまずきpost-build は make のたびに毎回走る。重い処理を書くとビルドが遅くなる。ここは軽い仕上げだけに留め、大きな追加はパッケージや overlay に寄せるのが筋がよい。

🔁 選ぶ→焼く→試すを回す

ここまでの道具は、ばらばらに使うものではない。menuconfig で選び、make でイメージを作り、実機や QEMU で試し、気になった点をまた menuconfig に戻って直す——この輪を回すのが本体だ。

1周が終わるたびに make savedefconfig で defconfig を更新し、うまくいった状態を確定させておく。こうすれば、失敗しても直前の良い状態にいつでも戻れる。

💡
ポイントカスタマイズは大きな一発勝負ではなく、小さな「選ぶ→焼く→試す」を何周も回す作業だ。1周を小さく保つほど、どの変更が効いたのかが分かりやすくなる。

最小イメージから始めて、パッケージを1つ、overlay を1枚、post-build を一手——と少しずつ肉付けしていけば、いつのまにか「自分の欲しい形」のイメージが手元に立ち上がっている。

この項目に出てくる用語

BR2_PACKAGE_びーあーるつーぱっけーじ
Buildrootで各パッケージの有効・無効を表す設定名の接頭辞。
rootfsオーバーレイるーとえふえすおーばーれい
指定フォルダの中身を、完成後のrootfsへそのまま重ねてコピーする仕組み。
post-buildスクリプトぽすとびるどすくりぷと
イメージ化の直前に自動実行される、rootfsを仕上げるスクリプト。

関連コマンド

make menuconfigmake <board>_defconfigmake (Buildroot)

▶ 学習アプリでこの続きを学ぶ・演習する