Raspberry PiやJetsonに自分専用のLinuxを入れたい。IoT製品の開発でカスタムLinuxが必要になった——。
そんなあなたのための入門ガイドだ。この記事では、Yocto Projectの基本概念(Poky・BitBake・レイヤー・レシピ)から開発環境のセットアップ、最初のLinuxイメージのビルド、QEMUでの動作確認までを一通り解説する。
Yoctoは最初こそ敷居が高く感じるが、仕組みを理解すれば驚くほど柔軟だ。この記事を読み終える頃には、あなたも最初のLinuxイメージをビルドできるようになっているはずだ。
Yocto Projectとは
Yocto Project は、組み込みデバイス向けにカスタマイズされたLinuxディストリビューションを作成するためのオープンソースプロジェクトだ。
重要なのは、Yocto自体はOSではない ということ。Yoctoは「Linuxを作るための道具箱」だ。
Yoctoが解決する課題
組み込みLinux開発には、以下のような課題がある:
- ストレージが少ない (数MB〜数GB)→ 不要なパッケージを削る必要がある
- CPUが非力 (ARM Cortex-Aなど)→ 軽量化が必須
- 特殊なハードウェア (独自ドライバ)→ カーネルのカスタマイズが必要
- 長期サポート (10年以上使う製品も)→ 再現性のあるビルドが必要
Yoctoは、これらすべてを解決できる標準的なビルドシステムだ。
Buildroot / OpenWRTとの違い
| 項目 | Yocto | Buildroot | OpenWRT |
|---|---|---|---|
| 柔軟性 | 非常に高い | 中程度 | ルーター特化 |
| 学習コスト | 高い | 低め | 低め |
| 商用サポート | 豊富 | 限定的 | 限定的 |
| 採用企業 | Intel, NXP, TI, Sony | 中小企業が多い | ネットワーク機器 |
| パッケージ管理 | RPM/DEB/IPK | なし | OPKG |
商用製品やIoTデバイスを開発するなら、Yoctoを学んでおいて損はない。大手半導体メーカーのSDKは、ほぼすべてYoctoベースだ。
どんな企業・製品で使われているか
- Intel :IoT・産業用プラットフォーム
- NXP :i.MXシリーズの公式BSP
- Texas Instruments :Sitaraプロセッサ向け
- Sony :デジタルカメラ、オーディオ機器
- Automotive Grade Linux (AGL) :車載Linuxの標準
Yoctoを構成する4つの基本要素
Yoctoを理解するには、以下の4つの概念を押さえておく必要がある。
Poky(リファレンスディストリビューション)
Poky は、Yocto Projectが提供するリファレンス実装だ。「ひな形」だと思ってほしい。
Yoctoを始めるときは、まずPokyをダウンロードするところから始まる。Pokyには、BitBake、基本レイヤー、サンプルイメージなど、開発に必要なものが一式含まれている。
BitBake(ビルドエンジン)
BitBake は、Yoctoのビルドを実行するエンジンだ。Makefileの代わりに「レシピ」を読み込み、依存関係を解決しながらビルドを進める。
# 最小構成のLinuxイメージをビルド
bitbake core-image-minimal
# 特定のパッケージだけビルド
bitbake busybox
# パッケージの情報を表示
bitbake -e busybox | grep ^PV=
レイヤー(Layers)
レイヤー は、関連するレシピや設定をまとめたディレクトリだ。Yoctoの最大の特徴は、この「レイヤー構造」にある。
- meta :OpenEmbeddedのコアレイヤー
- meta-poky :Poky固有の設定
- meta-raspberrypi :Raspberry Pi向けBSP
- meta-mylayer :自分のカスタマイズ用
レイヤーを積み重ねることで、ベースを壊さずにカスタマイズできる。詳しくはレイヤー作成ガイドを参照してほしい。
レシピ(Recipes)
レシピ は、特定のソフトウェアをビルドする方法を記述した .bb ファイルだ。
# hello-world_1.0.bb
SUMMARY = "Hello World サンプルアプリケーション"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://hello.c"
S = "${WORKDIR}"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} -o hello ${WORKDIR}/hello.c
}
do_install() {
install -d ${D}${bindir}
install -m 0755 hello ${D}${bindir}
}
開発環境の準備
必要なスペック
| 項目 | 最低 | 推奨 |
|---|---|---|
| CPU | 4コア | 8コア以上 |
| メモリ | 8GB | 32GB以上 |
| ディスク | 100GB(SSD推奨) | 300GB以上 |
| OS | Ubuntu 22.04 LTS | Ubuntu 24.04 LTS |
必須パッケージのインストール
sudo apt update
sudo apt install -y gawk wget git diffstat unzip texinfo gcc build-essential \
chrpath socat cpio python3 python3-pip python3-pexpect xz-utils debianutils \
iputils-ping python3-git python3-jinja2 python3-subunit zstd liblz4-tool \
file locales libacl1
# ロケール設定(en_US.UTF-8が必要)
sudo locale-gen en_US.UTF-8
Pokyのダウンロード
# 作業ディレクトリを作成
mkdir -p ~/yocto && cd ~/yocto
# Pokyをクローン(scarthgap = LTSブランチ、2028年4月30日までサポート)
git clone -b scarthgap git://git.yoctoproject.org/poky
# ダウンロード完了を確認
ls poky/
bitbake documentation meta meta-poky meta-yocto-bsp oe-init-build-env scripts
最初のビルドを実行する
oe-init-build-envの実行
ビルド環境を初期化するスクリプトだ。毎回ターミナルを開いたときに実行する必要がある。
cd ~/yocto/poky
source oe-init-build-env build
# 実行後、自動的にbuildディレクトリに移動する
# 以下のメッセージが表示されればOK
You had no conf/local.conf file. This configuration file has therefore been
created for you...
source で実行することに注意してほしい。./ での実行や bash 経由では環境変数が引き継がれない。
local.confの設定
conf/local.conf を編集して、ビルドの並列数を設定する。
# conf/local.confを編集
# 以下を追加(CPUコア数に合わせて調整)
BB_NUMBER_THREADS = "8"
PARALLEL_MAKE = "-j 8"
# ターゲットマシン(デフォルトはqemux86-64)
MACHINE ?= "qemux86-64"
BB_NUMBER_THREADS はBitBakeが並列で実行するタスク数、PARALLEL_MAKE はmakeコマンドの並列数だ。CPUコア数を設定するのが目安になる。
bitbake core-image-minimalの実行
# 最小構成のLinuxイメージをビルド
bitbake core-image-minimal
# 初回ビルドは1〜3時間かかる(スペックによる)
# 途中でエラーが出た場合は、もう一度同じコマンドを実行
初回ビルドでは、ソースコードのダウンロードからコンパイルまで全工程が走る。キャッシュが効くので、2回目以降は大幅に速くなる。
ビルド時間の目安
| 環境 | 初回ビルド | 再ビルド(変更なし) |
|---|---|---|
| 8コア / 32GB RAM / SSD | 約1時間 | 数分 |
| 4コア / 16GB RAM / SSD | 約2〜3時間 | 約10分 |
| 4コア / 8GB RAM / HDD | 約4〜6時間 | 約30分 |
ビルド結果をQEMUで動かす
runqemuコマンドの使い方
ビルドが成功したら、runqemu コマンドでエミュレータを起動できる。実機がなくてもLinuxイメージの動作確認ができるのが嬉しいところだ。
# QEMUでイメージを起動
runqemu qemux86-64
# GUIなしで起動する場合(SSHやシリアルで操作する場合)
runqemu qemux86-64 nographic
# 起動後、ログイン(ユーザー: root、パスワード: なし)
qemux86-64 login: root
root@qemux86-64:~#
動作確認のポイント
# カーネルバージョンを確認
root@qemux86-64:~# uname -a
Linux qemux86-64 6.6.x-yocto-standard #1 SMP ...
# ファイルシステムを確認(最小構成なので非常にコンパクト)
root@qemux86-64:~# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/root 48M 32M 14M 70% /
# 終了
root@qemux86-64:~# poweroff
まとめ
この記事では、Yocto Projectの基礎から最初のビルドまでを解説した。
- Yoctoは「組み込みLinuxを作るための道具箱」
- Poky、BitBake、レイヤー、レシピの4つが基本要素
- Ubuntu環境で
bitbake core-image-minimalを実行すればビルドできる - QEMUで動作確認が可能
Yoctoは確かに学習コストが高いが、一度マスターすればどんな組み込みデバイスにも対応できる汎用スキルになる。基本がわかったら、次はカスタマイズに挑戦しよう。
- レイヤーの作成と管理 — カスタムレイヤーでビルドを構造化する
- レシピの書き方 — 自作アプリをイメージに追加する
- Raspberry PiでカスタムLinuxをビルドする — 実機で動かす
- ビルドエラーが出たらデバッグガイドを参照
組み込みLinuxの世界をもっと深く学びたい人には、以下の書籍がおすすめだ。