「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つの概念を押さえておく必要があります。
🔧 Yoctoの構成要素

① 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=..."
SRC_URI = "file://hello.c"
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 |
必須パッケージのインストール(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をクローン(styheadブランチ = 最新安定版) $ git clone -b styhead git://git.yoctoproject.org/poky.git # ダウンロード完了を確認 $ ls poky/ bitbake documentation meta meta-poky meta-yocto-bsp oe-init-build-env scripts
💡 Tips:ブランチ名はYoctoのバージョンを表します。styheadは2024年最新のLTS版です。
最初のビルドを実行する
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...
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"
bitbake core-image-minimalの実行
# 最小構成のLinuxイメージをビルド $ bitbake core-image-minimal # 初回ビルドは1〜3時間かかります(スペックによる) # 途中でエラーが出た場合は、もう一度同じコマンドを実行
ビルド時間の目安
| 環境 | 初回ビルド | 再ビルド(変更なし) |
|---|---|---|
| 8コア / 32GB RAM / SSD | 約1時間 | 数分 |
| 4コア / 16GB RAM / SSD | 約2〜3時間 | 約10分 |
| 4コア / 8GB RAM / HDD | 約4〜6時間 | 約30分 |
ビルド結果をQEMUで動かす
runqemuコマンドの使い方
ビルドが成功したら、runqemuコマンドでエミュレータを起動できます。
# QEMUでイメージを起動 $ runqemu qemux86-64 # GUIなしで起動する場合 $ 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 Linuxイメージをビルドできました。
次のステップ:カスタマイズへの道
Yoctoの基本がわかったら、次は実際のカスタマイズに挑戦しましょう。
🚀 おすすめの次のステップ
- レイヤーを追加する:meta-raspberrypiなどのBSPレイヤーを追加
→ [内部リンク:Yoctoレイヤーの作成と追加方法] - 自作レシピを作成する:自分のアプリをイメージに追加
→ [内部リンク:Yoctoでカスタムレシピを作成する方法] - 実機で動かす:Raspberry PiやJetsonでブート
→ [内部リンク:YoctoでRaspberry Pi向けLinuxをビルドする]
まとめ:Yoctoを学ぶメリット
この記事では、Yocto Projectの基礎から最初のビルドまでを解説しました。
- ✅ Yoctoは「組み込みLinuxを作るための道具箱」
- ✅ Poky、BitBake、レイヤー、レシピの4つが基本要素
- ✅ Ubuntu環境で
bitbake core-image-minimalを実行すればビルドできる - ✅ QEMUで動作確認が可能
Yoctoは確かに学習コストが高いですが、一度マスターすればどんな組み込みデバイスにも対応できる汎用スキルになります。
特にIoT・車載・産業機器などの分野では、Yoctoスキルを持つエンジニアの需要は非常に高いです。ぜひこの記事をきっかけに、Yoctoの世界に飛び込んでみてください!
関連記事
- 【実践】Yoctoでカスタムレシピを作成する方法|.bbファイルの書き方完全ガイド
- 【図解】Yoctoレイヤーの作成と追加方法
- YoctoでRaspberry Pi向けLinuxをビルドする
- その他準備中


コメント