2023 年 06 月 20 日 Yocto Project よもやま話
今回は、先月予告しました "Yocto Project 始めます その 2" と題して、実際に Yocto Project から poky を入手して構築を行い簡単なカスタマイズを行うまで複数回の連載記事の第二回目を提供していきます。
本連載では、Yocto Project が提供する poky ディストリビューションで LTS として提供される Kirkstone (Yocto 4.0) を使用していますが、今回は Kirkstone の中でもバージョン 4.0.10 をベースにカスタマイズを行う際に必要となる基礎的な情報を紹介していきます。
【補足:前回(第 5 回「Yocto Project 始めます その 1」)時点からの変更点】
本章では、カスタマイズを行う際に必要と思われる Build System の概要を説明していきます。
上記の図は、YoctoProject の WebSite やドキュメントで多く使われている Build System のワークフロー図です。右側上部の凡例を拡大したものが下図となります。
薄い水色の Build System は、bitbake コマンドを指しています。
bitbake コマンドは、灰色の Metadata/Input のうち、Metadata(bb) [以降レシピと表記]をパラメータとして起動し、起動時に Configuration と呼ばれるファイル群を読みこんで動作します。
bitbake コマンドは、レシピの種類によって最終生成物が異なります。
レシピは、".bb" をサフィックスに持つファイルで、既存のレシピに対する差分は ".bbappend" と呼ばれるファイルに記載します。
ワークフロー図左側の Metadata/Input には、レシピ(Metadata)の他に 3 つのコンフィグレーションの記載があります。
ここに記載されたファイルは、bitbake 実行時に読み込む poky/meta/conf/bitbake.conf ファイルの中から読み出されています。
bitbake.conf 内の該当箇所
809 ################################################################## 810 # Include the rest of the config files. 811 ################################################################## 812 813 require conf/abi_version.conf 814 include conf/site.conf 815 include conf/auto.conf 816 include conf/local.conf 817 require conf/multiconfig/${BB_CURRENT_MC}.conf 818 include conf/machine/${MACHINE}.conf 819 include conf/machine-sdk/${SDKMACHINE}.conf 820 include conf/distro/${DISTRO}.conf 821 include conf/distro/defaultsetup.conf 822 include conf/documentation.conf 823 include conf/licenses.conf 824 require conf/sanity.conf
include/require という2種類の構文で読み込むファイルを指定しています。
2つの構文の違いは、require の場合、ファイルは必須であり見つからない場合はエラーとなり bitbake はエラーで終了します。include の場合は、ファイルは見つからない場合にエラーとしません。
User Configuration は、conf/local.conf を指しており、oe-init-build-env で生成されたプロジェクト固有の設定を定義します。
Machine BSP Configuration は、MACHINE 変数に設定されたマシン名のコンフィグレーションファイルを指しており、マシンに固有の設定を定義します。
Policy Configuration は、DISTRO 変数に設定されたディストリビューション名のコンフィグレーションファイルを指しており、ディストリビューション固有の設定を定義します。
複数のマシンでも同一のディストリビューションを指定した場合は、同一の構成となることから、Policy とワークフロー図では表記されています。
変数と演算子
Bitbake では様々な変数が使用されています。
Bitbake コマンドが主に参照する変数に関しては、BitBake User Manual で解説されています。
meta-data に関する変数に関しては、Yocto Project Reference Manual で簡単に解説されています。
変数に対する値の設定に関して、bitbake では独自の書式・演算子が使用されており、こちらも BitBake User Manual で解説されています。
ワークフロー図の薄い水色の Build System は、bitbake コマンドで実行される処理を指しています。
個々の処理(Process Steps)はタスクという単位に分割されて定義されています。
bitbake では、共通する処理や定義は ".bbclass" をサフィックスとして持つファイルに記載されています。
基本的な処理内容は、poky/ meta/classes/base.bbclass 及び、base.bbclass から読み込まれる他のクラスで定義されています。
base.bbclass 内の他のクラスファイルの読み込み指定個所
1 BB_DEFAULT_TASK ?= "build" 2 CLASSOVERRIDE ?= "class-target" 3 4 inherit patch 5 inherit staging 6 7 inherit mirrors 8 inherit utils 9 inherit utility-tasks 10 inherit metadata_scm 11 inherit logging
クラスファイルの読み込みは、inherit を指定し、サフィックスを除いたクラス名を指定しています。
クラスファイルは、複数のレシピ間で共通する処理が記述されており、Yocto4.0.10のpoky/meta/classes ディレクトリには 207 のクラスファイルが含まれています。
各クラスの処理内容は、Yocto Project Reference Manual で簡単に解説されています。
base.bbclass ファイルは、 上記リファレンスマニュアルで解説されているよう、全てのレシピファイルで共通するクラスファイルで、自動的に読み込まれる仕様となっています。
最終生成物がパッケージとなるソフトウェアレシピは、主に以下のタスクを経てパッケージを生成します。
実際の処理の概要は、Yocto Project Overview and Concepts Manual 内の BitBake Tool にて説明されています。
ワークフロー図のオレンジ色の Upstream Source は、OpenEmbdded の Build System の特徴であるパッケージを生成する際に使用するソースコードは、指定された場所から取得するというコンセプトの元、外部から取得することを基本としています。
Yocto Project Overview and Concepts Manual 内の Sources にて概要が説明されています。
ワークフロー図の緑色の Package Feeds は、ソフトウェアレシピの最終生成物であり、またイメージレシピを生成する際に使用するパッケージが保存されている場所となります。 Yocto Project Overview and Concepts Manual 内の Package Feeds にて概要が説明されています。
ワークフロー図の青色の Output Image Data は、Package Feeds 内のパッケージを使用して、bitbake の ImageGeneration/SDKGeneration の処理を経て生成される Image/SDK を指します。Yocto Project Overview and Concepts Manual 内の ImageGeneration SDKGeneration にて概要が説明されています。
ワークフロー図で説明されている、MetaData/Inputs のレシファイルピやコンフィグレーションファイル、task を定義するクラスファイルは、レイヤーと呼ばれる集合に含まれます。
レイヤーの定義は、Yocto Project Reference Manual で簡単に説明されており、Layer Model については Yocto Project Overview and Concepts Manual 内の The Yocto Project Layer Model にて説明されています。
基本的なレシピファイルやコンフィグレーションファイル、クラスファイルの集合体はベースレイヤーと呼ばれています。
Yocto Project で提供する poky では、Yocto Project とopen embedded project が共同で開発・管理を行う openembedded-core (meta)が含まれています。
open embedded project では、openembedded-core に含まれなかった一般的に使われるレシピの集合を meta-oe レイヤーとして提供しています。
Distribution のコンフィグレーションファイルや、Distribution に特有のレシピは、Distro Layer と呼ばれるレイヤーに含まれます。conf/distro 以下にコンフィグレーションファイルを含むレイヤーはディストリビューションレイヤーに分類されます。
Yocto Project Overview and Concepts Manual 内の Distro Layer にて概要が説明されています。Poky では、meta-poky が Distro Layer として提供されています。
マシンのコンフィグレーションファイルやマシンに特有のレシピは、BSP Layer と呼ばれるレイヤーに含まれます。conf/machine 以下にコンフィグレーションファイルを含むレイヤーは BSP レイヤーに分類されます。
Yocto Project Overview and Concepts Manual 内の BSP Layer にて概要が説明されています。Poky では meta-yocto-bsp が BSP Layerとして提供されています。
ディストリビューションの定義やマシンの定義を含まないソフトウェアレシピが含まれるレイヤーは、SoftWare レイヤーと呼ばれています。
Yocto Project Overview and Concepts Manual 内の Software Layer にて概要が説明されています。
Poky では、Software レイヤーは提供されていませんが、openembedded-project では、複数のソフトウェアレイヤーが提供されています。(meta-oe 以外はソフトウェアレイヤー)
Open embedded project では、公開されている Layer 情報を OpenEmbedded Layer Index として提供しています。
OpenEmbedded Layer Index では、レイヤーの検索だけでなく、keyword を指定したレシピの検索や Machine ・ Distro ・ Classes の検索及び一覧表示が行えます。
現在の Layer 構成では含まれないソフトウェアを追加する際、既に作成されたレシピが無いか検索する際に便利なサイトが提供されています。
今回はカスタマイズ作業を行う際に必要と思われるトピックを紹介してきました。 説明やリンク先の情報を元に、次回連載では実際にイメージのカスタマイズ・レシピのカスタマイズなどの実例の紹介を行う予定です。
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2023 年 08 月 28 日 Vigiles サポート
2024 年 03 月 26 日 Yocto Project よもやま話
2023 年 07 月 25 日 Yocto Project よもやま話
2023 年 06 月 20 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2024 年 07 月 26 日 イベントレポート
2024 年 07 月 09 日 イベントレポート
2024 年 06 月 03 日 イベントレポート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2022 年 09 月 27 日 リクルート
2024 年 09 月 25 日 信州リネオ便り
2024 年 08 月 20 日 信州リネオ便り
2024 年 08 月 07 日 信州リネオ便り
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部