やまどり
Yocto Project 2026年最新の始め方:Ubuntuで組み込みLinuxをビルドしてQEMUで動かす

Yocto Project 2026年最新の始め方:Ubuntuで組み込みLinuxをビルドしてQEMUで動かす

この記事では、2026年時点のYocto Projectを使って、組み込みLinuxの最小構成をビルドし、QEMU上で起動するところまでを解説します。

Share on XShare on Facebook

はじめに

Yocto Projectとは?

Yocto Projectは、組み込みLinux向けのカスタムOSを作るための仕組みです。

UbuntuやDebianのような完成済みディストリビューションをそのまま使うのではなく、必要なパッケージ、カーネル、ブートローダー、ライブラリ、アプリケーションを組み合わせて、自分の用途に合ったLinuxイメージを生成します。

たとえば、以下のような用途で使われます。

  • Raspberry Piや産業用ボード向けのLinuxイメージ作成
  • 不要なパッケージを削った軽量Linuxの作成
  • 製品ごとに固定された再現性のあるビルド環境
  • カーネル、ドライバ、アプリをまとめた量産向けイメージ作成

Yoctoでよく出てくる言葉は、最初は次の4つだけ覚えれば十分です。

用語

意味

Poky

Yoctoのリファレンス環境

BitBake

レシピを読んでビルドするツール

Recipe

パッケージのビルド手順を書いたファイル

Layer

レシピや設定をまとめたもの

必要なPCスペック

Yoctoはビルドが重いです。小さなサンプルでも、普通のアプリ開発より多くのディスク容量とメモリを使います。

公式Quick Buildでは、ビルドホストに 最低140GBの空き容量最低32GBのRAM が必要とされています。また、複数ビルドや高速化を考えるなら、さらに多いディスク容量とCPUコア数が推奨されています。

この記事では以下の環境を想定します。

  • OS: Ubuntu 24.04 LTS
  • RAM: 32GB以上推奨
  • ストレージ: 200GB以上推奨
  • CPU: できれば8コア以上

WSL2でも試せますが、初回はネイティブLinuxかLinux仮想マシンの方がトラブルが少ないです。公式ドキュメントでも、Windows環境ではWSL2を使ったビルドホスト構築が案内されています。

手順

https://docs.yoctoproject.org/brief-yoctoprojectqs/index.htmlをもとに作成しています。

Ubuntuに必要なパッケージを入れる

まず、Yoctoのビルドに必要なパッケージをインストールします。

Shell
sudo apt-get install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 libcrypt-dev locales python3 python3-git python3-jinja2 python3-pexpect python3-pip python3-subunit socat texinfo unzip wget xz-utils zstd

このパッケージ一覧は、Yocto Project公式のQuick BuildでUbuntu/Debian向けに案内されているものです。

localeも確認しておきます。

Shell
locale -a | grep en_US.utf8

何も表示されない場合は、次を実行します。

Shell
sudo dpkg-reconfigure locales

BitBakeリポジトリをクローンする

Shell
git clone https://git.openembedded.org/bitbake

ビルド環境をセットアップ

Shell
./bitbake/bin/bitbake-setup init --non-interactive poky-wrynose poky distro/poky machine/qemux86-64 --setup-dir-name my-yocto

ビルド環境を初期化する

次に、ビルド用の環境変数を読み込みます。

Shell
source ./bitbake-builds/my-yocto/build/init-build-env

実行すると、自動的に build ディレクトリへ移動します。

この中に設定ファイルやビルド成果物が作られます。


イメージをビルドする

まずはGUIありのイメージである core-image-sato をビルドします。

Shell
bitbake core-image-sato

初回ビルドはかなり時間がかかります。PC性能や回線速度によっては長時間かかることもあります。

Ubuntu 24.04でBitBakeが失敗する場合

Ubuntu 24.04で bitbake core-image-sato を実行したところ、以下のエラーが出ました。

ERROR: User namespaces are not usable by BitBake, possibly due to AppArmor.
See https://discourse.ubuntu.com/t/ubuntu-24-04-lts-noble-numbat-release-notes/39890#unprivileged-user-namespace-restrictions for more information.

Summary: There was 1 ERROR message, returning a non-zero exit code.

これはYoctoやBitBakeのバグというより、Ubuntu 24.04系のAppArmor設定による影響です。

Ubuntu 24.04では、AppArmorと組み合わせて、非特権ユーザーによる user namespace の利用が制限されています。BitBakeはビルド時の分離やサンドボックス処理で user namespace を使用するため、この制限に引っかかるとビルド開始前にエラーになります。

一時的な回避方法

まずは、再起動すると元に戻る一時的な方法で確認します。

Shell
echo 0 | sudo tee /proc/sys/kernel/apparmor_restrict_unprivileged_userns

設定値を確認します。

Shell
cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns

以下のように 0 が表示されればOKです。

0

その後、もう一度ビルドします。

Shell
bitbake core-image-sato

これでビルドが進み始めれば、原因はUbuntu 24.04 / Kubuntu 24.04のAppArmorによる user namespace 制限だったと判断できます。

永続的に設定する方法

毎回コマンドを実行するのが面倒な場合は、sysctlの設定ファイルを作成して永続化できます。

Shell
echo "kernel.apparmor_restrict_unprivileged_userns=0" | sudo tee /etc/sysctl.d/60-apparmor-namespace.conf

設定を反映するには、再起動します。

Shell
sudo reboot

再起動後、以下のコマンドで確認します。

Shell
cat /proc/sys/kernel/apparmor_restrict_unprivileged_userns

0 と表示されれば設定は反映されています。

0

セキュリティ上の注意点

この設定は、Ubuntu 24.04で追加・強化された user namespace の制限を緩めるものです。

user namespace は、コンテナやサンドボックス処理などで使われる仕組みですが、過去にはローカル権限昇格やコンテナ脱出系の攻撃に関係することもありました。そのため、Ubuntu 24.04ではAppArmorによって非特権ユーザーの user namespace 利用が制限されています。

個人の開発PCでYoctoをビルドする用途であれば、一時的に設定を変更して作業するのは現実的な回避策です。ただし、共有サーバー、本番環境、不特定多数のユーザーがログインする環境では注意が必要です。

まずは一時的な方法でビルドできることを確認し、問題なければ開発用PCに限って永続化する、という流れがおすすめです。


QEMUで起動する

ビルドが終わったら、QEMUで起動します。

Shell
runqemu snapshot

よく使うイメージの違い

Yoctoには複数のサンプルイメージがあります。

イメージ名

内容

core-image-minimal

最小構成

core-image-base

基本的なLinux環境

core-image-sato

GUI付きサンプル環境

core-image-full-cmdline

コマンドライン向けに比較的機能が多い


MACHINEを確認する

Yoctoでは、どのターゲット向けにビルドするかを MACHINE で指定します。

設定ファイルは以下です。

conf/local.conf

初期状態では、たとえば次のようになっています。

MACHINE ??= "qemux86-64"

これは、QEMUのx86_64環境向けにビルドする設定です。

Raspberry Piや特定の評価ボード向けにビルドする場合は、BSPレイヤを追加して MACHINE を変更します。


レイヤとは?

Yoctoで重要なのが「レイヤ」です。

レイヤは、レシピや設定をまとめたディレクトリです。公式ドキュメントでは、レイヤは関連する命令や設定を含むリポジトリであり、機能ごとにメタデータを分離することで再利用しやすくなると説明されています。

代表的なレイヤには次のようなものがあります。

レイヤ

内容

meta

基本レシピ

meta-poky

Poky用設定

meta-yocto-bsp

参照BSP

meta-openembedded

追加パッケージ群

meta-raspberrypi

Raspberry Pi向けBSP

レイヤ名は慣習的に meta- から始まります。


自分のレイヤを作る

アプリや独自設定を追加する場合は、自分用のレイヤを作ります。

Shell
cd ~/yocto/poky/build
bitbake-layers create-layer ../meta-yamadori
bitbake-layers add-layer ../meta-yamadori

レイヤが追加されたか確認します。

Shell
bitbake-layers show-layers

公式Quick Buildでも、bitbake-layers create-layer を使った独自レイヤ作成が紹介されています。


最初につまずきやすいポイント

ディスク容量不足

Yoctoの初回ビルドでは、ソース、ビルド中間生成物、キャッシュ、成果物が大量に作られます。

Shell
df -h

空き容量が少ない場合は、最低でも200GB程度は確保してから始めるのがおすすめです。

メモリ不足

RAMが少ないと、ビルド中に落ちたり、極端に遅くなったりします。公式要件では最低32GBのRAMが示されています。

古いUbuntuを使っている

古いUbuntuでは、Python、gcc、カーネルヘッダなどのバージョンが足りずに失敗することがあります。たとえばScarthgap 5.0.16のリリースノートでは、Ubuntu 20.04がEOLであり、ホスト環境としての対応が切られたことが案内されています。

2026年に新しく始めるなら、Ubuntu 24.04 LTSなどの新しい環境を使うのが無難です。


よく使うコマンドまとめ

# ビルド環境に入る
source oe-init-build-env

# イメージをビルド
bitbake core-image-minimal

# QEMUで起動
runqemu qemux86-64

# レイヤ一覧
bitbake-layers show-layers

# レイヤ追加
bitbake-layers add-layer ../meta-example

# 設定ファイルを編集
nano conf/local.conf

おわりに

2026年にYocto Projectを始めるなら、まずは Wrynose 6.0 LTS を使って、QEMU向けの core-image-sato をビルドするところから始めるのがおすすめです。

Yoctoは最初のビルドこそ重いですが、一度流れを理解すると、独自Linuxイメージ、BSP、アプリ追加、製品向けカスタムOSの作成まで進められます。

最初に覚えるべき流れは次の通りです。

まずはQEMUで起動するところまでできれば、Yoctoの第一歩は完了です。