32blogby StudioMitsu
yocto10 min read

Yocto Project入門:最初のLinuxイメージをビルドする

Yocto Projectの基本概念からUbuntuでのビルド、QEMUでの動作確認まで。Scarthgap 5.0 LTSベースで初心者向けに解説。

yoctoembedded-linuxbitbakescarthgap
目次

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との違い

項目YoctoBuildrootOpenWRT
柔軟性非常に高い中程度ルーター特化
学習コスト高い低め低め
商用サポート豊富限定的限定的
採用企業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の代わりに「レシピ」を読み込み、依存関係を解決しながらビルドを進める。

bash
# 最小構成の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 ファイルだ。

text
# 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}
}

開発環境の準備

必要なスペック

項目最低推奨
CPU4コア8コア以上
メモリ8GB32GB以上
ディスク100GB(SSD推奨)300GB以上
OSUbuntu 22.04 LTSUbuntu 24.04 LTS

必須パッケージのインストール

bash
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のダウンロード

bash
# 作業ディレクトリを作成
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の実行

ビルド環境を初期化するスクリプトだ。毎回ターミナルを開いたときに実行する必要がある。

bash
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 を編集して、ビルドの並列数を設定する。

bash
# 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の実行

bash
# 最小構成の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イメージの動作確認ができるのが嬉しいところだ。

bash
# QEMUでイメージを起動
runqemu qemux86-64

# GUIなしで起動する場合(SSHやシリアルで操作する場合)
runqemu qemux86-64 nographic

# 起動後、ログイン(ユーザー: root、パスワード: なし)
qemux86-64 login: root
root@qemux86-64:~#

動作確認のポイント

bash
# カーネルバージョンを確認
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は確かに学習コストが高いが、一度マスターすればどんな組み込みデバイスにも対応できる汎用スキルになる。基本がわかったら、次はカスタマイズに挑戦しよう。

組み込みLinuxの世界をもっと深く学びたい人には、以下の書籍がおすすめだ。

PRMastering Embedded Linux Development 4th Ed (2024)Amazonで見る
PREmbedded Linux Development Using Yocto Project 3rd Ed (2023)Amazonで見る