2022 年 09 月 20 日 Yocto Project よもやま話
今回は、先月予告しました "Yocto Project 始めます その 1" と題して、実際に Yocto Project から poky を入手して構築を行い簡単なカスタマイズを行うまで複数回の連載記事の第一回目を提供していきます。
本連載では、執筆時点における Yocto Project が提供する poky ディストリビューションの最新の Kirkstone 4.0.3 での導入例を紹介していきます。
poky を入手して構築を始める際に、各種ドキュメントを使って事前に行う手順を確認しておいたり、概念を理解しておくことが重要です。
必読ドキュメントを二点挙げます。
上記マニュアルは、poky を入手してイメージの構築を行う際の基本的な手順が記載されています。このマニュアルに従って実施しても良いのですが、次に紹介するドキュメントも軽く読んでから実施することをお勧めします。
本ドキュメントでは、Yocto Project と、基盤となっているツールおよび metadata の開発元であった OpenEmbedded との関係や、Yocto Project で提供する poky の概要、Layer の概念説明、基本的な用語解説、基本的な Workflow の説明などが行われています。
Yocto Project が提供する poky では、ターゲットマシンで動作するイメージと呼ばれるファイル群を構築するツール bitbake が提供されています。
bitbake は、レシピと呼ばれるソフトウェアを構築する際に必要なデータが記載されたファイルを指定して実行します。レシピ及び、構築を行うディストリビューションやマシンの設定ファイルは、レイヤーとしてまとめられて配布されています。
Poky では、OpenEmbedded Project で開発されて、今は共同で開発・保守を行っている openembedded-corre と呼ばれる基本的なソフトウェアを収集したレイヤーと、Yocto Project で提供する参照(実装例として提供)レイヤーとして、pokyディストリビューションを定義する meta-poky と BSP の実装サンプルとして meta-yocto-bsp の 3 つのレイヤーを提供しています。
本稿では Linux Distoribution がインストールされたホスト上での設定を説明します。
なお、Yocto Project の開発者向けマニュアル Yocto Project Development Tasks Manual には、Linux Distribution がインストールされた Linux ホスト の開発環境の設定の他に、CROPS (CROss PlatformS ) と呼ばれる Docker コンテナを使用して、プラットフォーム非依存で開発する環境の設定、Windows 上の WSL2 上で開発を行う環境の設定が紹介されていますので、Linux ホスト以外を利用する時はそちらを参照ください。
Poky はリリースを行う際に、以下の Linux ディストリビューション上で動作確認をおこなっています。
上記情報は、Yocto Project が提供する Yocto Project Reference Manual に記載された情報です。(Quick Build でのサポートするディストリビューションでは、AlmaLinux の記載がもれています)
リリースされる時期によって異なる場合がありますので、実際に使用する poky のバージョンのマニュアルに記載されている情報を確認してください。
基本的に、どのディストリビューションを利用しても同じように構築が行えますが、poky で基本的な操作を習得した後、SoC ベンダーやボードベンダーの提供する BSP を使用する場合、BSP で動作確認が行われたディストリビューションおよびバージョンで開発を始めることをお勧めします。
今回の記事は、Yocto Project Quick Build でも操作例として使用されている ubuntu20.04 での構築例となります。
最新版の Quick Build では 50GByte 以上の空き容量とのみ記載されており、以前記載のあった最低限の Core 数やメモリ容量について言及がなくなっています。
poky ディストリビューションを構築する限りにおいては、空き容量 50GByte で構築可能ですが、ベンダー BSP の中には、機械学習向けのソフトウェアの構築を行う場合は最低 250GB 以上の空きが必要と書かれたものもあります。
以下は、Quick Build に記載された ubuntu を使って Yocto Project を動かす場合のパッケージの追加コマンドです。
$ sudo apt install 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 pylint3 xterm python3-subunit mesa-common-dev zstd liblz4-tool
poky のバージョンによって、インストールする必要の有るパッケージに変更があるので、使用するバージョンに該当するマニュアルに記載されたパッケージをインストールします。
他のディストリビューションを使用する場合は、リファレンスマニュアルに記載された手順でパッケージを追加します。
Yocto Project の Documentで は、複数の poky の入手方法が紹介されています。
以下、Yocto Project の Website 内の DOWNLOADS ページです。
Poky の入手方法は、git のコマンドを使用する方法と、tar.bz2 でアーカイブされたファイルをブラウザ経由でダウンロードする方法の 2 種類が提供されています。
上記拡大図の "Copy to Clipboard" でクリップボードにコピーされた文字列は
git clone -b kirkstone git://git.yoctoproject.org/poky.git
となります。
git コマンドのサブコマンド clone を使用して、git.yoctoproject.org/poky.git から
ローカルのマシン上に複製を行います。-b オプションはクローン対象としてブランチを指定しています。
ブランチ名を指定した場合、kirkstone の最新版が複製され、実行する日によってダウンロードされるデータの内容が異なります。
対して、"DOWNLOAD YP CORE KIRKSTONE4.0.3" のボタンは、Yocto Project から Yocto4.0.3 としてリリースが行われた際の状態となり、常に同じ内容となります。
git コマンドを使用して、上記 DOWNLOAD ボタンと同じ内容のものを入手する場合、ブランチ名を指定する代わりに、TAG 名、"yocto-4.0.3" または "kirkstone-4.0.3" を指定します。
Quick build では、より高度な git の使用方法が紹介されています。
$ git clone git://git.yoctoproject.org/poky
最初に git リポジトリの全体を複製しています。
$ cd poky $ git branch -a
clone 終了後、生成された poky ディレクトリに移動し、登録されているブランチ名を確認します。
$ git checkout -t origin/kirkstone -b my-kirkstone
origin/kirkstone というブランチを指定して、独自のブランチ名 "my-kirkstone" でチェックアウトを実行します。
この場合も、チェックアウトされた状態は、kirkstone ブランチの最新版となります。特定の tag 付けされた時点でチェックアウトを行う場合は git clone 実行後、git tag でタグ名を確認した後、タグ名を指定して chekout を実行します。
$ cd poky $ git tag $ git checkout tags/yocto-4.0.3
入手したpokyを使用してプロジェクトを生成します。
初期化スクリプト oe-init-build-env を実行して構築環境を設定します。
$ source oe-init-build-env You had no conf/local.conf file. This configuration file has therefore been created for you with some default values. You may wish to edit it to, for example, select a different MACHINE (target hardware). See conf/local.conf for more information as common configuration options are commented. You had no conf/bblayers.conf file. This configuration file has therefore been created for you with some default values. To add additional metadata layers into your configuration please add entries to conf/bblayers.conf. The Yocto Project has extensive documentation about OE including a reference manual which can be found at: https://docs.yoctoproject.org For more information about OpenEmbedded see the website: https://www.openembedded.org/ ### Shell environment set up for builds. ### You can now run 'bitbake' Common targets are: core-image-minimal core-image-full-cmdline core-image-sato core-image-weston meta-toolchain meta-ide-support You can also run generated qemu images with a command like 'runqemu qemux86' Other commonly useful commands are: - 'devtool' and 'recipetool' handle common recipe tasks - 'bitbake-layers' handles common layer tasks - 'oe-pkgdata-util' handles common target package task $
初回スクリプト実行時は、conf/local.conf conf/bblayers.conf が生成されていないため、デフォルトのファイルが作成されます。
$tree conf conf |-- bblayers.conf |-- local.conf `-- templateconf.cfg 0 directories, 3 files cd poky $
今回の例では、デフォルト状態で構築を行います。(カスタマイズは次回以降)
構築対象マシンは。qemux86-64 となり、qemu 向け仮想マシンイメージが生成されます。
Quick Build で紹介されている OS の構築例を実行します。
$ bitbake core-image-sato
X11+GNOME+SatoDesktop 環境のイメージ、core-image-sato の構築を始めます。
Yocto4.0 より、core-image-sato の構築には rust が必要となり、以前のバージョンと比較して倍以上の時間が掛かるようになりました。
イメージの起動確認
$ runqemu
一昔前の組込み Linux の展示会に行くと良く目にした DeskTop 画面が表示されますが、x11サーバーの上で動作するイメージとなっており、ベンダーから提供される BSP では x11 向けドライバーが提供されないケースが多くなったため、このイメージを生成できない BSP も多くなってきました。
起動した qemu は "Shutdown" のアイコンをクリックすることで、終了させます。
以上、駆け足で poky を入手して、最初のイメージの構築までの手順を説明しました。 今回の構築したものをベースにカスタマイズを行う方法を本連載の次回以降に解説を行う予定です。この続きは「Yocto Project 始めます その 2」として 2022 年 12 月ごろの掲載を予定しています。
8 月に掲載した「Yocto への道 その 1」の続編にあたる「Yocto への道 その 2」を掲載予定です。今日に至る Yocto Project の配布物 poky に関する情報の第二弾となります。
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 日 マーケティング統括部