リネオブログ

Yocto よもやま話 第 5 回「Yocto Project 始めます その 1」

2022 年 09 月 20 日   Yocto Project よもやま話

今回は、先月予告しました "Yocto Project 始めます その 1" と題して、実際に Yocto Project から poky を入手して構築を行い簡単なカスタマイズを行うまで複数回の連載記事の第一回目を提供していきます。

本連載では、執筆時点における Yocto Project が提供する poky ディストリビューションの最新の Kirkstone 4.0.3 での導入例を紹介していきます。

目次

  1. 構築する前に
  2. 開発ホストの設定
  3. Poky の入手
  4. プロジェクトの生成
  5. イメージの構築
  6. 最後に
  7. 次回予告

1. 構築する前に

poky を入手して構築を始める際に、各種ドキュメントを使って事前に行う手順を確認しておいたり、概念を理解しておくことが重要です。

必読ドキュメントを二点挙げます。

1.1 Quick Build

Yocto Project Quick Build

上記マニュアルは、poky を入手してイメージの構築を行う際の基本的な手順が記載されています。このマニュアルに従って実施しても良いのですが、次に紹介するドキュメントも軽く読んでから実施することをお勧めします。

1.2 Overview

Software Overview

本ドキュメントでは、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 つのレイヤーを提供しています。

2. 開発ホストの設定

本稿では Linux Distoribution がインストールされたホスト上での設定を説明します。
なお、Yocto Project の開発者向けマニュアル Yocto Project Development Tasks Manual には、Linux Distribution がインストールされた Linux ホスト の開発環境の設定の他に、CROPS (CROss PlatformS ) と呼ばれる Docker コンテナを使用して、プラットフォーム非依存で開発する環境の設定、Windows 上の WSL2 上で開発を行う環境の設定が紹介されていますので、Linux ホスト以外を利用する時はそちらを参照ください。

2.1 ディストリビューションおよびバージョンの選定

Poky はリリースを行う際に、以下の Linux ディストリビューション上で動作確認をおこなっています。

  • Ubuntu 18.04 (LTS)
  • Ubuntu 20.04 (LTS)
  • Fedora 34
  • Fedora 35
  • CentOS 7.x
  • CentOS 8.x
  • AlmaLinux 8.5
  • Debian GNU/Linux 9.x (Stretch)
  • Debian GNU/Linux 10.x (Buster)
  • Debian GNU/Linux 11.x (Bullseye)
  • OpenSUSE Leap 15.3

上記情報は、Yocto Project が提供する Yocto Project Reference Manual に記載された情報です。(Quick Build でのサポートするディストリビューションでは、AlmaLinux の記載がもれています)
リリースされる時期によって異なる場合がありますので、実際に使用する poky のバージョンのマニュアルに記載されている情報を確認してください。

基本的に、どのディストリビューションを利用しても同じように構築が行えますが、poky で基本的な操作を習得した後、SoC ベンダーやボードベンダーの提供する BSP を使用する場合、BSP で動作確認が行われたディストリビューションおよびバージョンで開発を始めることをお勧めします。

今回の記事は、Yocto Project Quick Build でも操作例として使用されている ubuntu20.04 での構築例となります。

2.2 開発ホストの要件

最新版の Quick Build では 50GByte 以上の空き容量とのみ記載されており、以前記載のあった最低限の Core 数やメモリ容量について言及がなくなっています。

poky ディストリビューションを構築する限りにおいては、空き容量 50GByte で構築可能ですが、ベンダー BSP の中には、機械学習向けのソフトウェアの構築を行う場合は最低 250GB 以上の空きが必要と書かれたものもあります。

Yocto Project の各種ドキュメントには記載がありませんが、ベンダー BSP のドキュメントでは、SSD の使用を強く推奨するケースが見られます。
同時 6 コア以上使用する場合は、SSD 上で開発を行うことを筆者は推奨します。
搭載メモリについては、1 論理コアあたり 4GB 以上を推奨します。

2.3 開発ホストへのパッケージの追加

以下は、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 のバージョンによって、インストールする必要の有るパッケージに変更があるので、使用するバージョンに該当するマニュアルに記載されたパッケージをインストールします。

他のディストリビューションを使用する場合は、リファレンスマニュアルに記載された手順でパッケージを追加します。

3. Poky の入手

Yocto Project の Documentで は、複数の poky の入手方法が紹介されています。

3.1 DOWNLOADS ページで紹介された方法

以下、Yocto Project の Website 内の DOWNLOADS ページです。

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" を指定します。

3.2 Quick Build で紹介された方法

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

4. プロジェクトの生成

入手した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 向け仮想マシンイメージが生成されます。

5. イメージの構築

Quick Build で紹介されている OS の構築例を実行します。

$ bitbake core-image-sato

X11+GNOME+SatoDesktop 環境のイメージ、core-image-sato の構築を始めます。
Yocto4.0 より、core-image-sato の構築には rust が必要となり、以前のバージョンと比較して倍以上の時間が掛かるようになりました。

イメージの起動確認

$ runqemu

 DeskTop 画面

一昔前の組込み Linux の展示会に行くと良く目にした DeskTop 画面が表示されますが、x11サーバーの上で動作するイメージとなっており、ベンダーから提供される BSP では x11 向けドライバーが提供されないケースが多くなったため、このイメージを生成できない BSP も多くなってきました。
起動した qemu は "Shutdown" のアイコンをクリックすることで、終了させます。

6. 最後に

以上、駆け足で poky を入手して、最初のイメージの構築までの手順を説明しました。 今回の構築したものをベースにカスタマイズを行う方法を本連載の次回以降に解説を行う予定です。この続きは「Yocto Project 始めます その 2」として 2022 年 12 月ごろの掲載を予定しています。

7. 次号予告

8 月に掲載した「Yocto への道 その 1」の続編にあたる「Yocto への道 その 2」を掲載予定です。今日に至る Yocto Project の配布物 poky に関する情報の第二弾となります。

この記事の著者
執筆者
伊東 孝康

ウィンドウシステム X10 の時代からオープンソースに関わり、リネオでカーネル層からアプリケーション層まで幅広い組込みの開発を行う。
2020 年 10 月 Yocto Project Ambassador に就任

Yocto Project の勉強がしたい Yocto での問題を解決して欲しい お客様の Yocto 開発を支援するサービス群 Yoctoコンシェルジュ

組込みLinuxセキュリティ基礎講座
Vigiles サポート
Yocto Project よもやま話
Yocto よもやま話 第 14 回 「Yocto 4.3 Nanbield リリース」
Yocto よもやま話 第 14 回 「Yocto 4.3 Nanbield リリース」

2024 年 03 月 26 日 Yocto Project よもやま話

Yocto よもやま話 第 13 回 「Yocto Project の最新動向 2023 夏」
Yocto よもやま話 第 13 回 「Yocto Project の最新動向 2023 夏」

2023 年 07 月 25 日 Yocto Project よもやま話

Yocto よもやま話 第 12 回 「Yocto Project 始めます その 2」
Yocto よもやま話 第 12 回 「Yocto Project 始めます その 2」

2023 年 06 月 20 日 Yocto Project よもやま話

Linux 技術ネタ
RISC-Vについて学ぶ-後編
RISC-Vについて学ぶ-後編

2024 年 01 月 10 日 Linux 技術ネタ

RISC-Vについて学ぶ-前編
RISC-Vについて学ぶ-前編

2023 年 12 月 12 日 Linux 技術ネタ

イベントレポート
EdgeTech+ West 2024 出展レポート
EdgeTech+ West 2024 出展レポート

2024 年 07 月 26 日 イベントレポート

Advanced Technology Forum 2024 Summer 参加レポート
Advanced Technology Forum 2024 Summer 参加レポート

2024 年 07 月 09 日 イベントレポート

リクルート
新卒採用、絶賛募集中!
新卒採用、絶賛募集中!

2023 年 05 月 30 日 リクルート

国立大学オンライン研修レポート 2022
国立大学オンライン研修レポート 2022

2022 年 09 月 27 日 リクルート

信州リネオ便り
社内BBQを開催しました!
社内BBQを開催しました!

2024 年 09 月 25 日 信州リネオ便り

夏季休業明け、スイカを頂きました!
夏季休業明け、スイカを頂きました!

2024 年 08 月 20 日 信州リネオ便り

逃げ上手の聖地、諏訪大社上社前宮
逃げ上手の聖地、諏訪大社上社前宮

2024 年 08 月 07 日 信州リネオ便り

ソリューション統括部
シリコンバレー探検記 2019 ~番外編~
シリコンバレー探検記 2019 ~番外編~

2019 年 12 月 10 日 ソリューション統括部

シリコンバレー探検記 2019 ~後編~
シリコンバレー探検記 2019 ~後編~

2019 年 12 月 10 日 ソリューション統括部

シリコンバレー探検記 2019 ~前編~
シリコンバレー探検記 2019 ~前編~

2019 年 12 月 10 日 ソリューション統括部

マーケティング統括部
大成功決起大会!!(ET2019)
大成功決起大会!!(ET2019)

2019 年 12 月 13 日 マーケティング統括部

ESEC 2019 決起大会
ESEC 2019 決起大会

2019 年 04 月 25 日 マーケティング統括部

シリコンバレー探検記 その 2
シリコンバレー探検記 その 2

2018 年 12 月 18 日 マーケティング統括部