Yocto Project徹底解説!なぜ組み込みLinuxで採用される?
........
- 更新日
- 公開日
- 2026.02.25
組み込みLinux(リナックス)を開発する上で、開発環境の構築やビルドプロセスの複雑さに悩んでいませんか。
本記事では、組み込みLinux開発環境として広く採用されているYocto Projectの全体像から、Layer、Recipe、BitBakeといった基本概念まで詳しく解説します。
1. Yocto Projectとは
組み込みLinuxの開発では、デバイスごとに異なるハードウェア構成、依存関係の複雑さ、パッケージ管理、セキュリティパッチの適用、長期運用に向けたメンテナンス性など、さまざまな課題が存在します。特に、Linuxディストリビューションを一から構築する場合、ツールチェーンの整備やカスタムイメージ生成、再現性のあるビルド環境の維持といった作業に多大な工数が必要となります。
こうした課題を体系的に解決するための標準化された仕組みを提供しているのが Yocto Project です。Yocto Projectは、組み込みLinux開発のためのエコシステムを提供する包括的なソリューションであり、各種ツール、実行環境、ビルドツール群を統合することで、再現性の高いカスタムLinuxディストリビューションを構築できるように設計されています。レイヤ構造を活用することで、異なるハードウェアやソフトウェア構成にも柔軟に対応できる点が、多くの企業から採用される理由の一つです。
また、Yocto Projectはオープンソースプロジェクトとして運営されており、多数のメーカーや企業が参画しています。ゴールドメンバーにはMicrosoft、ルネサスエレクトロニクスなど著名な企業が名を連ね、さらにAutomotive Grade Linuxといった業界団体も参加しています。こうした幅広いコミュニティの支援により、安定性と信頼性を兼ね備えた開発基盤が提供されています。
Yocto Projectの構成要素
Yocto Projectは、いくつかの重要な構成要素によって成り立っています。主な要素としてLayer(レイヤー)、Recipe(レシピ)、そして最終ファイルを生成するための手順を示したまとまりが存在します。これらの手順や設定は、設定ファイルとしてまとめられ、BitBake(ビットベイク)と呼ばれるビルドツールによって処理されます。
またPoky(ポッキー)は、Yocto Projectの参照実装として提供される基本的なビルド環境です。
Layer、Recipe、BitBake、Pokyの構造や概要については2章以降で詳しく説明していきます。
2. Layerの構造と役割
Layerは、半導体デバイスや半導体メーカなどの大まかな括りでまとめられたRecipeの集合体です。デバイスによって変わる部分をLayerとして切り出し、それを切り替えることで、その他の部分は同様である機能を別のデバイスでも使用することが可能です。
簡単にまとめると…半導体デバイス単位や、半導体メーカ単位、機能単位など、大まかな括りでまとめられたRecipeの集合体 ・Layer毎に追加/削除する事が可能、更にビルド毎にLayerを調整するといった使い方も可能 ・Layerの中にさらに別のLayerを追加する(Layerの多重構造)が可能 ・更に、Layerの中には複数のRecipeが含まれている |
Layerには必ず構成される要素として、ライセンスの定義、Layerのコンフィギュレーションを制御するConfigファイルがあります。そして一つひとつのフォルダごとにRecipeという構造体を持っています。
Yocto Project では、さまざまな種類の Layer が利用できます。
代表的なものとしては:
- Poky:Yocto Project に同梱される標準 Layer
- meta-openembedded:Yoctoに標準で含まれない追加機能や幅広いパッケージを提供する Layer
- BSP Layer(各半導体メーカ提供):特定ボード向けの設定やドライバを提供する Layer
このように、Layer は Yocto Project の柔軟性を支える重要な構造要素であり、目的に応じて組み合わせることで、多様な半導体デバイスに対応した Linux イメージを構築できます。
Layerの構造
実際のLayer構造のファイルツリーの一例として、以下にルネサスのRZシリーズで使われているLayer構造を記載しました。
RZシリーズには、meta-openembeddedのLayerの中にいくつものLayerが存在しています。また、meta-filesystems(メタ・ファイルシステムズ)の他に、meta-gnome(メタ・グノーム)などのLayerが存在しています。
このmeta-filesystemsのLayerを深掘りしていくと、recipes-filesystems(レシピズ・ファイルシステムズ)やrecipes-support(レシピズ・サポート)、recipes-extended(レシピズ・エクステンデッド)などの3つのRecipeが確認できます。
Layer を組み合わせた最適なビルド環境構築
Yocto Project には多様な Layer が存在しますが、そのすべてを使う必要はありません。プロジェクトに必要な機能やターゲットデバイスに応じて、必要な Layer を選択し、組み合わせて利用します。
Layer は階層構造を持ち、上位 Layer が下位 Layer の設定を上書きできるため、共通部分を保ちながら用途に応じた機能追加やカスタマイズを柔軟に行えます。また、Layer の有効化・無効化は設定ファイルで制御でき、プロジェクトごとに最適な構成へ簡単に切り替えることができます。
さらに、新しい Layer を作成したい場合は、BitBake のコマンドでテンプレートを自動生成できるため、標準構成を備えた Layer の雛形を素早く作成し、独自拡張を行うことが可能です。
BitBake は使用する Layer 構成を解析してビルドしますが、利用中の Layer はコマンドで確認できます。なお、Layer を作成しただけでは BitBake に認識されないため、bblayers.conf に登録して有効化する必要があります。特定の Layer を常に使用したい場合は、poky/meta-poky/conf 以下に設定を追加することで、毎回コマンドを実行せずに恒常的に有効化できます。
3. Recipeファイルの構造
Recipeは、Layerを構成する一つの部品のようなものです。Recipeがあることで、機能ごとに必要となるモジュールやドライバを指定することができます。
また、このRecipeファイルによって、ソースコードをダウンロードする宛先を指定したり、パッチファイルの適用を指定したりします。Recipeは、ビルドするための詳細な設計図を構成する上で欠かせない要素です。
簡単にまとめると...必要となる機能毎のモジュールやドライバ単位 ・Recipeの名の通り、まさしく設計図のようなもので、そのモジュール/ドライバのソースコードダウンロード先や、ビルド/パッチ適用等の手順を詳細に記載したもの ・また、ライセンス(GPL、LGPL、Apache-2.0等)の定義もこのファイルで実施する |
Recipeファイルの種類と役割
Recipeファイルの登録や削除について説明します。これらは、Layerフォルダの下に存在する各Recipeフォルダにある.bbファイルもしくは.bbappendファイルを基準にしてビルドが行われます。
.bbと.bbappendの2つのファイルが存在しますが、基本となるファイルは.bbファイルです。.bbappendファイルは、bbに追加するというファイルです。.bbファイルに記載されている命令が.bbappendファイルにもある場合は、.bbappendによって一部上書きされます。
Recipeファイルの重要なポイント
Recipeファイルには大きく3つのポイントがあります
① Recipeライセンスの記載
これは、RecipeがOSSのどのライセンスなのかを指定するものです。例えば、BSD-3-Clauseでは、BSD3条項ライセンスを適用するという記載になっています。
② SRC_URIの指定
1つ目の行頭がhttpもしくはhttpsから始まるものは、該当のソースコードをどこからダウンロードするのかというのを示しています。
2つ目の、fileから始まる部分は、1のファイルに対してパッチファイルをどこに適用するのかを指定しています。
③ SRC_URIのハッシュ値の記載
SRC_URI_MD5SUMやSHA256とありますが、これらはソースコードのハッシュ値を指定しています。このハッシュ値を指定することによって、インターネットからダウンロードされたファイルが破損していないかを自動的にチェックすることが可能です。
4. BitBakeの機能と役割
BitBakeの中には、さまざまなツールや機能が含まれています。例えば、タスクの管理ツールやタスクの解析ツール、ダウンローダやハッシュ値の検証のツール、そしてコンパイラやインストーラ、さらにはクロスコンパイラを含むイメージファイルの生成機能などがあります。
簡単にまとめると...Layer、Recipeを元にして、必要となるタスクをリスト化し、タスクマネージャー的な動作を行う ・必要な仕事(ダウンロード、パッチ適用、コンパイル、ビルド等)を順番に従い呼び出し、並列処理する ・タスク間に依存関係がある場合、依存関係が解決できていない状態の時は、タスク順序の入れ替えや、停止を行い、依存関係解消後に再度タスクを実施する処理を行う |
BitBakeの動作プロセス
BitBakeでは、ユーザが1つのコマンドを実行することで、LayerやRecipeファイルに記述された各種タスクを解析します。この解析結果に基づいて、実行すべきタスクの一覧(タスクリスト)が生成されます。
BitBakeは、このタスクリストに従って必要なツールを順次呼び出し、処理を実行します。また、あるRecipeの処理に別のRecipeが必要な場合でも、タスク間の依存関係を自動的に解析し、正しい実行順序に調整します。
この仕組みにより、ユーザはRecipe同士の依存関係や実行順序を意識することなく、ビルドを進めることができます。
他のビルドツールとの比較
Linuxで使用されるビルドツールには他にもMake、CMake、Autotoolsなどがあります。
特にこの中のMakeは、ビルドやコンパイルするために必要な単体のソースコードをシンプルに記載しているため、よく使われています。しかし、組み込みLinuxのようにさまざまなファイルが複合的に操作するシステムにおいては、多数のMakeの実行が必要になってきます。
これらの開発効率を上げるために、BitBakeは使用されています。記載方法が独特で慣れにくいというデメリットはありますが、慣れることで開発効率を大幅に上げることができます。
| ビルド環境 | ビルド対象 | 依存関係の処理 | ビルド環境依存性 | 仕様難易度 |
|---|---|---|---|---|
| BitBake | 複数 |
複数のソースツリーを対象に依存関係を整理し自動処理 |
あまり依存しない (使用するツールもRecipeに記載する) |
高い |
| Make/CMake | 単体 |
単体のソースツリーを処理 不足する依存関係は予め処理が必要 |
依存する(ビルド環境のインストール状況) ※CMakeはクロスプラットフォーム対応有 |
低い |
| Autotools | 単体 |
単数のソースツリーを処理するが、ライブラリ等をスクリプトで処理 不足する依存関係は予め処理が必要 |
依存する(ビルド環境のインストール状況) | 普通 |
BitBakeのダウンロード機能
OSSやソースコードの多くは、ネット上に公開されています。ソースコードは基本的にGitサーバなどから取得されるため、BitBakeにはこれらのダウンロードのツールも含まれています。
また、ボードやCPU、ビルドに追加するソフトやビルドのオプションの選択を記載したコンフィグファイル(local.conf)を指定することによって、BitBakeの全体の調整を行うことが可能です。
5. Linuxビルド環境Pokyについて
Pokyは、Yocto Projectで提供される標準的なビルド環境一式を指す名称です。ビルドに必要なLayer、Recipe、BitBake、関連ツール群が統合された「Yocto Projectの参照実装」として機能します。
ユーザはこのPokyを基盤として、目的に応じて各種Layerやレシピを組み合わせ、BitBakeを実行することで、ターゲットボード上で動作するイメージファイルを生成できます。これにより、組み込みLinux環境を効率的かつ柔軟に構築できる仕組みが整備されています。
PokyとBSPの違い
PokyとBSPの違いについて説明します。
BSP(Board Support Package)とは、特定のハードウェア上で Linux を動作させるために必要な、ボード固有のドライバや設定ファイル、ツール類をまとめたソフトウェア群のことです。BSPは特定のMPUやSoCを前提として作られているため、他のデバイスに流用することはできません。
一方で、PokyはBSPを構築するための土台となるリファレンスデザイン(参照設計図)のような存在です。Pokyの上に各半導体メーカが提供する BSP用Layerを組み合わせることで、1つのビルドシステムを構築する仕組みになっています。
PokyとBSPの構成要素
PokyとBSPの構成要素については、以下の表のように比較することができます。
| 構成要素の分類 | Pokyの構成要素 | BSPの構成要素 |
|---|---|---|
| ビルドツール | BitBake |
Pokyの構成要素に依存 |
| meta-layer | meta-layer(BitBakeで必要となるツールやドライバのRecipe、汎用で使用可能なもののRecipe一式を含めたLayer) |
ボードに依存した設定、Recipe、Layer |
| Poky用設定 | meta-pokylayer(Poky用の設定を記載したLayer) |
U-boot、Device Tree、カーネル、ファイルシステムなど |
| サンプルBSP | meta-yocto-bsplayer(代表的なQEMUなどのサンプルBSPLayer) |
プロプライエタリなソフトを動かすためのファームウェアバイナリなど |
| 提供方法 | Yocto Projectとして標準提供 |
各半導体メーカのGitサーバから提供 |
Pokyには、ボードを起動するために必要なファイルシステムや、プロプライエタリなソフトウェアを動作させるためのファームウェア・バイナリなどは含まれていません。これらのBSPは、各半導体メーカが独自の Git サーバ等を通じて提供しています。
例えば、meta-renesas はルネサス製 SoC や MPU 向けの汎用Layer、meta-rzg-bsp はルネサス RZ シリーズ向けの BSP Layerです。これらのLayerは GitHub や各社の Git サーバなどを経由して公開されており、近年では半導体メーカの公式サイトから直接ダウンロードする方式ではなく、Git/GitHub から取得する形式が主流になっています。
そのため、これらのLayerを入手する際にユーザ登録などは不要で、公開リポジトリから自由にダウンロードすることが可能です。
Yocto Linuxのリリースサイクル
Poky には、Linux カーネルと同様にリリースサイクルが存在します。
このリリースには、5〜6 か月ごとに行われる通常版と、2年に一度リリースされる LTS(Long Term Support)版の 2 種類があります。この点だけを見れば、Linux カーネルのメインラインと似たリリースタイミングに思えるかもしれません
しかし、Poky はあくまで開発用途を前提としており、LTS 版のサポート期間はおよそ4年と設定されています。
これは、Linux カーネルのメインライン LTS よりも長いサポート期間であり、製品開発に必要とされる開発期間を十分にカバーできるようスケジュールが組まれているためです。
Pokyバージョンごとの違い
|
linux-yocto(kernel) ・Kernel本体のバージョン gcc:GNU Compiler Collection ・GNUプロジェクトが作成した、プログラム(Cソース)などを機械語に変換するコンパイラ binutils:GNU Binary Utilities ・gccでコンパイルした結果をバイナリファイル(実行ファイルや、オブジェクトファイル、ライブラリ等)に変換するツール群 ・Pokyにおいては、クロスコンパイルを含む、クロスツールチェーンを構築する為に使われる glibc:GNU C Library ・ユーザの作成したアプリケーションと、Linuxカーネルを結びつける汎用ライブラリ群 ・デバッグメッセージを出力するprintfやメモリを確保するmalloc、文字列をコピーするstrcpy等が含まれる python3:Python Version 3 ・BitBakeの処理を行う為に必要。Recipe、タスク等もpython形式で書かれている為、解析の為にも必要 |
6. まとめ
Yocto Project は、単なる Linux ディストリビューションではなく、任意のハードウェア向けに最適化された独自の Linux イメージを構築するためのフレームワーク です。Poky を中心としたビルド環境をベースに、BSP や各種 Layer を組み合わせることで、柔軟かつ再現性の高い開発体制を構築できます。
また、Recipe・Layer といった仕組みがビルド内容の管理性を高め、BitBake によるビルドシステムが大規模プロジェクトでも安定した開発を可能にします。
つまり Yocto Project は、「複雑な組み込み Linux 開発を体系化し、長期的に維持できる環境を提供するためのプラットフォーム」であると言えます。
(執筆者:高橋利典 編集者:安西滉樹)
