「Raspberry PiやJetsonに自分専用のLinuxを入れたい」
「IoT製品の開発でカスタムLinuxが必要になった」
「Yoctoって聞いたことあるけど、何から始めればいいかわからない」
そんなあなたのために、この記事ではYocto Projectの基礎から実際のビルドまでを完全解説します。
組み込みLinuxの開発に10年以上携わってきた僕の経験から言うと、Yoctoは最初こそ敷居が高く感じますが、仕組みを理解すれば驚くほど柔軟です。この記事を読み終える頃には、あなたも最初のLinuxイメージをビルドできるようになっているはずです。
この記事でわかること
- Yocto Projectとは何か、なぜ必要なのか
- BitBake、レイヤー、レシピの仕組み
- 開発環境のセットアップ方法
- 最初のLinuxイメージをビルドする手順
- QEMUでの動作確認方法
Yocto Projectとは?5分でわかる概要
Yocto Projectは、組み込みデバイス向けにカスタマイズされたLinuxディストリビューションを作成するためのオープンソースプロジェクトです。
重要なのは、Yocto自体はOSではないということ。Yoctoは「Linuxを作るための道具箱」です。
Yoctoが解決する「組み込みLinuxの課題」
組み込み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:Edison、Minnowboardなど
- 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}
}
開発環境の準備【Ubuntu推奨】
必要なスペック
| 項目 | 最低 | 推奨 |
|---|---|---|
| CPU | 4コア | 8コア以上 |
| メモリ | 8GB | 32GB以上 |
| ディスク | 100GB(SSD推奨) | 300GB以上 |
| OS | Ubuntu 22.04 LTS | Ubuntu 22.04/24.04 LTS |
Yoctoのビルドは非常にリソースを消費します。できるだけ高スペックなマシンを用意しておくと、ビルド時間が大幅に短縮できます。
必須パッケージのインストール(Ubuntu 22.04)
# 必須パッケージをインストール
$ 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 libegl1-mesa libsdl1.2-dev \
python3-subunit mesa-common-dev zstd liblz4-tool file locales
# ロケール設定(en_US.UTF-8が必要)
$ sudo locale-gen en_US.UTF-8
Pokyのダウンロード
# 作業ディレクトリを作成
$ mkdir -p ~/yocto && cd ~/yocto
# Pokyをクローン(scarthgap = 現行LTSブランチ、2027年頃までサポート)
$ git clone -b scarthgap git://git.yoctoproject.org/poky.git
# ダウンロード完了を確認
$ ls poky/
bitbake documentation meta meta-poky meta-yocto-bsp oe-init-build-env scripts
scarthgapはYocto 5.0のLTSブランチで、2027年頃までサポートが続く推奨ブランチです。プロダクション環境ではこのように具体的なリリース名を固定して使うのがベストプラクティスです。最新の非LTSリリースが必要な場合はstyhead(Yocto 5.1)も利用できますが、EOLが短いため注意してください。
最初のビルドを実行する
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を編集
$ nano 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:~# opkg list-installed
# 終了
root@qemux86-64:~# poweroff
おめでとうございます!これであなたも最初のYocto Linuxイメージをビルドできました。
次のステップ:カスタマイズへの道
Yoctoの基本がわかったら、次は実際のカスタマイズに挑戦しましょう。
- レイヤーを追加する:meta-raspberrypiなどのBSPレイヤーを追加して実機向けビルドに挑戦
- 自作レシピを作成する:自分のアプリをイメージに追加してみる
- 実機で動かす:Raspberry PiやJetsonでブートさせてみる
まとめ:Yoctoを学ぶメリット
この記事では、Yocto Projectの基礎から最初のビルドまでを解説しました。
- Yoctoは「組み込みLinuxを作るための道具箱」
- Poky、BitBake、レイヤー、レシピの4つが基本要素
- Ubuntu環境で
bitbake core-image-minimalを実行すればビルドできる - QEMUで動作確認が可能
Yoctoは確かに学習コストが高いですが、一度マスターすればどんな組み込みデバイスにも対応できる汎用スキルになります。
特にIoT・車載・産業機器などの分野では、Yoctoスキルを持つエンジニアの需要は非常に高いです。ぜひこの記事をきっかけに、Yoctoの世界に飛び込んでみてください!
関連記事
※本記事は2026年1月時点の情報に基づいています。Yoctoのバージョンアップにより手順が変更される場合があります。最新情報はYocto Project公式サイトをご確認ください。