リネオブログ

Yocto よもやま話 第 4 回「Yocto への道 その 1」

2022 年 08 月 19 日   Yocto Project よもやま話

先月予告しました、今回は「Yocto への道」と題して、今日に至る Yocto Project の配布物 poky に関する情報を提供していきます。

目次

  1. Yocto とは ?
  2. これまでのリリース
  3. Poky の誕生まで
  4. 次回予告

1. Yocto とは ?

Yocto Project では、プロジェクトの名称について "Yocto" 単独では使用せず、"Yocto Project" と、"Project" を含んで表記しています。Yocto と単独での表記は、Yocto Project の git server の poky において、バージョンと対になって yocto-4.0 等の Tag 名で使用されています。
複数回にわたって、Yocto Project の現在に至るまでの経緯を「Yocto への道」として紹介していきます。

2. これまでのリリース

Yocto Project でリリースされている poky ディストリビューションについて、wiki.yoctoproject.org にて Yocto Project 発足前のリリース情報を含めてまとめられています。下表は抜粋及び一部加筆したものです。

Codename Yocto Project Version Release Date Poky Version BitBake branch
Langdale 4.1 (2022/10/28)    
Kirkstone 4.0 2022/4/28   2.0
Honister 3.4 2021/10/26   1.52
Hardknott 3.3 2021/4/20 1.50
Gatesgarth 3.2 2020/11/4 24.0 1.48
Dunfell 3.1 2020/4/21 23.0 1.46
Zeus 3.0 2019/10/23 22.0 1.44
Warrior 2.7 2019/5/1 21.0 1.42
Thud 2.6 2018/11/15 20.0 1.40
Sumo 2.5 2018/5/11 19.0 1.38
Rocko 2.4 2017/10/26 18.0 1.36
Pyro 2.3 2017/5/12 17.0 1.34
Morty 2.2 2016/10/28 16.0 1.32
Krogoth 2.1 2016/4/29 15.0 1.30
Jethro 2.0 2015/10/31 14.0 1.28
Fido 1.8 2015/4/22 13.0 1.26
Dizzy 1.7 2014/10/31 12.0 1.24
Daisy 1.6 2014/4/24 11.0 1.22
Dora 1.5 013/10/31 10.0 1.20
Dylan 1.4 2013/4/1 9.0 1.18
Danny 1.3 2012/10/24 8.0 1.16
Denzil 1.2 2012/4/30 7.0 1.15
Edison 1.1 2011/10/17 6.0 1.13
Bernard 1.0 2011/4/5 5.0 1.11
Laverne 0.9 2010/10/24 4.0 1.11
Green 2010/6/11 3.3  
Purple 2009/12/15 3.2  
Pinky   2009/11/12 3.1  
Blinky   2007/8/1 3.0  
Clyde   2007/1/19 2.0  
Inky   2006/2/10 1.0  

なお、上記 Wiki では、Yocto 3.2 (Gatesgarth) に対する Poky のバージョンは N/A と記述されていますが、実際には 24.x というバージョン番号が TAG 名などに採用されています。

yocto index:poky1

Codename について

Poky の各バージョンにて Codename が付けられています。
Version12 の dissy まで、規則性も無く命名されていましたが、バージョンが上がるにつれ、codename を見ただけでどのバージョンか判り辛くなってきたため、Version13 の fido からある一定のルールに基づいた命名となりました。

Total Annihilation のキャラクラの名称から昇順に、Fido, Jethoro, Krogoth, Morty, Pyro, Rocko, Sumo, Thud, Warrior, Zeus Poky22 で Z まで行ってしまい、次は何になるか?と筆者は興味をもっていました。 Poky23 は Yocto Project では初の LTS リリースとなりますが、開発が開始する前に発表されたコードネームは dunfell
イギリス、ブリテン島中部にあるペナイン山脈で第二の高さを持つ山の名称が使われました。

山の名前が続くのかと思いきや、Poky24では、Gatesgarth という湖水地方にある集落名が命名されました。その後の Hardknott, Honister, Kirkstone, Langdale といずれも湖水地方の峠や渓谷から命名されています。2023 年 4 月リリース予定の Yocto 4.2 の codename の発表は 2022 年 9 月と予測しており、どの地名が採用されるのか今から楽しみにしています。

3. Poky の誕生まで

Yocto Project の git server では、Yocto Project 発足前の pokyとして開発が始まった当初から辿ることが可能となっています。
poky linux は、後に Intel に買収されることになるイギリスのソフトウェア会社 Opendhand 社の社内プロジェクトとして始まりました。開発のベースは、OpenEmbedded Project で開発が進められている bitbake 及び openembedded meta データをベースに独自のディストリビューション poky linux を開発する過程を、git に登録されている履歴から追っていきます。

poky の語源ですが、以下の様に紹介された文章があります。

At some time in 2005 Richard Purdie, then a developer at OpenedHand, created a fork of OpenEmbedded which had a more conservative choice of packages and created releases that were stable over a period of time. He named it Poky, after the Japanese snack (if you are worried about these things, Poky is pronounced to rhyme with hockey).

引用元:Vaduva, Alexandru; Gonzalez, Alex; Simmonds, Chris. Linux: Embedded Development . Packt Publishing. Kindle 版.より

なんと江崎グリコのスナック菓子 pocky に因んで名付けられていたのですね。この後開発されるデスクトップ環境の名称 SATO と併せて、日本との関わりを探ってみたくもあります。

3.1 poky 最初のコミット

2005/8/31 最初のコミットは openembedded project の metadata の複製です。

yocot-blog4-image2.jpg

この時点で poky というディレクトリ名が使われています。

3.1.1 ディレクトリ構成

download でファイルを入手して展開をおこなうと、以下の様なディレクトリ構成となります。

$ tree  -L 2
.
`-- openembedded
    |-- classes
    |-- conf
    |-- files
    |-- packages
    `-- site

6 directories, 0 files
$

この段階では、レイヤーは openembedded のみとなっています。
また、現在は recipes-kernel recipes-devtool など、recipes- を先頭に持つ複数のディレクトリ内に分散されている bb ファイル(レシピ)が、packages という一つのディレクトリ内に保存されています。
レシピ名やレシピバージョンを表す変数が、RN や RV ではなく PN や PV といったパッケージ由来の変数名となっているのは、bitbake/meta-data の開発当初はレシピとパッケージを厳密に定義していなかった時代の名残となります。

3.1.2 conf 内ファイル

conf ディレクトリ内のファイル

$ ls openembedded/conf/
bitbake.conf  distro  documentation.conf  licenses.conf  local.conf.sample  machine

$ ls openembedded/conf/distro/
familiar-0.8.3.conf  openzaurus-3.5.4.conf           preferred-gpe-versions-2.7.inc
familiar.conf        openzaurus.conf                 preferred-gpe-versions.inc
maemo-1.0.conf       preferred-e-versions.inc        preferred-opie-versions.inc
maemo-preferred.inc  preferred-gpe-versions-2.6.inc

$ ls openembedded/conf/machine/
c7x0.conf             jornada7xx.conf    tune-arm926ejs.conf  zaurus-clamshell-2.4.conf
handheld-common.conf  nokia770.conf      tune-arm9tdmi.conf   zaurus-clamshell-2.6.conf
ipaq-common.conf      spitz.conf         tune-strongarm.conf  zaurus-clamshell.conf
ipaq-pxa270.conf      tune-arm920t.conf  tune-xscale.conf
$
3.1.2.1 DISTRO

conf/distro ディレクトリ内では、openembedded に合流した famillar-linux と openzaurus 及び maemo が提供されています。

3.1.2.2 MACHINE

conf/machine ディレクトリ内では、SHARP の zaurus 向け、HP の ipaq/jornada 向け、nokia のタブレット端末向けの複数のマシン定義に混じって、現在では inc として提供される SoC 向けの共通定義ファイルも conf として提供されていました。

3.1.2.3 local.conf.sample

Bitbake で使用するプロジェクト固有の設定を行う conf/local.conf の雛形となるファイルの中

$ grep MACHINE openembedded/conf/local.conf.sample
# MACHINE = "collie"
# the MACHINE attribute (see above)
# your MACHINE setting. Currently only supported on Zaurus Clamshells.
$ 

で、default として記載されている MACHINE を見ていくと、MACHINE 名のサンプル(コメントになっています)には collie(Sharp LinuxZaurus SL-5500)の文字列が残されています。その後の注釈で現行サポートは Zaurus Clamshells (SL-C700 以降の折り畳み式のディスプレイを備えたモデル) との記載があります。

DISTRO に関しては

$ grep DISTRO openembedded/conf/local.conf.sample
# DISTRO = "familiar"
# This is done automatically if you set DISTRO (see above)
$ 

と、openembedded プロジェクトに合流した familiar-linux がサンプルとして記載されています。

3.1.3 packages 内ファイル

前述のとおり、この時代の openembedded の meta データは、単一の packages ディレクトリ内に保存されています。

$ ls openembedded/packages/
apmd           fixesext     ipkg                 linux               network-suspend-scripts  resourceext           xcalibrateext
autoconf       flex         ipkg-utils           linux-hotplug       openswan                 rp1                   xcomposite
automake       fontconfig   irda-utils           linux-libc-headers  orinoco                  scap                  xdamage
base-files     freetype     jpeg                 lrzsz               pango                    setserial             xdmcp
base-passwd    gcc          libidl               m4                  pcmcia-cs                sharp-binary-only     xext
binutils       gdbm         libmatchbox          makedevs            perl                     startup-notification  xextensions
bison          gettext      libpcap              matchbox-common     pkgconfig                sysfsutils            xfont
busybox        glib-2.0     libpng               matchbox-desktop    popt                     sysvinit              xpm
cairo          glibc        libsm                matchbox-panel      portmap                  tinylogin             xproto
compositeext   gmp          libtool              matchbox-wm         ppp                      tslib                 xrandr
console-tools  gnome        libxfixes            meta                ppp-dialin               udev                  xserver
coreutils      gnu-config   libxft               misc-binary-only    prism3-support           update-modules        xt
damageext      gtk-doc      libxml               module-init-tools   psmisc                   update-rc.d           xtrans
db             hostap       libxrandr            modutils            quilt                    wireless-tools        zaurus-updater
dropbear       ice          libxrender           mtd                 randrext                 wpa-supplicant        zlib
expat          initscripts  libxsettings         ncurses             recordext                x11
fakeroot       intltool     libxsettings-client  netbase             renderext                xau
$ find . -name "*.bb" | wc
    254     254   13298
$

レシピファイル(.bb) の数は 254 となっています。
Openembedded project が発足直後は、すべてが一つのレイヤーの中に入っていました。
この状態は 2010 年まで継続することになります。 プロジェクトが歴史を積み重ねる中で、レシピの数も増えていき収集がつかなくなった反省から以下の文章が作成されたのでしょう。

4. Do not put everything into one layer: Use different layers to logically separate information in your build. As an example, you could have a BSP layer, a GUI layer, a distro configuration, middleware, or an application (e.g. "meta-filesystems", "meta-python", "meta-intel", and so forth). Putting your entire build into one layer limits and complicates future customization and reuse. Isolating information into layers, on the other hand, helps keep simplify future customizations and reuse.

引用元:What I wish I'd known about Yocto Project

3.2 poky 一通りの準備完了

openemnedded のメタデータの取得後、bitbake の取得、プロジェクト固有の初期化ファイル・readme ファイル・環境設定スクリプトが登録された状態となります。

3.2.1 ディレクトリ構成
$ tree -L 2
.
|-- bitbake
|   |-- AUTHORS
|   |-- ChangeLog
|   |-- MANIFEST
|   |-- TODO
|   |-- bin
|   |-- classes
|   |-- conf
|   |-- contrib
|   |-- doc
|   |-- lib
|   `-- setup.py
|-- build
|   `-- conf
|-- openembedded
|   |-- classes
|   |-- conf
|   |-- files
|   |-- packages
|   `-- site
|-- readme.txt
`-- setdevenv

15 directories, 7 files
$
3.2.2 追加ファイル

主な追加ファイルについて

3.2.2.1 build/conf/local.conf.sample
$ grep MACHINE build/conf/local.conf.sample
MACHINE = "c7x0"
#MACHINE = "nokia770"
$ 

MACHINE のデフォルトは、ザウルスのクラムシェルモデル、代替えに Nokia770 が記載されています

$ grep DISTRO  build/conf/local.conf.sample
DISTRO = "openzaurus-3.5.4"
DISTRO_TYPE = "debug"
$ 

DISTRO のデフォルトは、openzaurus-3.5.4 を使用する設定となっています。

3.2.2.2 追加レシピ

Maemo プロジェクト関連向けを主体に以下のレシピが追加されています。

xserver-kdrive-common/xserver-kdrive-common_0.1.bb
linux/linux-omap1_2.6.12-rc2.bb
xauth/xauth_cvs.bb
xtst/xtst_cvs.bb
xmodmap/xmodmap_cvs.bb
xmu/xmu_cvs.bb
rxvt/rxvt_2.7.9.bb
maemo/nokia770-init_1.0.bb
maemo/xpext_1.0-5.bb
maemo/xsp_1.0.0-8.bb
xcursor-transparent-theme/xcursor-transparent-theme_0.1.1.bb
xtscal/xtscal_0.6.3.bb
vera-fonts/ttf-bitstream-vera_1.10.bb
xdpyinfo/xdpyinfo_cvs.bb
xhost/xhost_20040413.bb
xcalibrate/xcalibrate_cvs.bb

3.3 poky.conf 登場

ここまで poky プロジェクトとして、openzaurus をディストリビューションとして使用していましたが、2005 年 11 月 16 日poky.conf が作成され、ディストリビューションの形が整ってきます。

yocot-blog4-image3.jpg

3.3.1 変更・追加ファイル

2005/08/31 以降 2005/11/16 までの間に、追加変更のあった主なファイルを紹介します。

3.3.1.1 local.conf.sample の相違点
$ diff 20050831/poky/build/conf/local.conf.sample 20051116/poky/build/conf/local.conf.sample
22a23,24
> #MACHINE = "akita"
> #MACHINE = "spitz"
25c27
< DISTRO = "openzaurus-3.5.4"
---
> DISTRO = "poky"
$

DISTRO が openzaurus-3.5.4 から poky に変更となっただけでなく、MACHINE の選択候補として、akita(Zaurus SL-C1000)及び spitz(Zaurus SL-C3000)が追加されています。

3.3.3.2 openembedded/conf 以下のファイル
$ ls openembedded/conf/
bitbake.conf  distro  documentation.conf  licenses.conf  local.conf.sample  machine

$ ls openembedded/conf/distro/
familiar-0.8.3.conf   openzaurus-3.5.4.conf     preferred-gpe-versions-2.7.inc
familiar-distro.conf  openzaurus.conf           preferred-opie-versions.inc
maemo-1.0.conf        poky.conf
$ ls openembedded/conf/machine/
akita.conf            ipaq-pxa270.conf  tune-arm920t.conf    tune-xscale.conf
c7x0.conf             jornada7xx.conf   tune-arm926ejs.conf  zaurus-clamshell-2.4.conf
handheld-common.conf  nokia770.conf     tune-arm9tdmi.conf   zaurus-clamshell-2.6.conf
ipaq-common.conf      spitz.conf        tune-strongarm.conf  zaurus-clamshell.conf
$

conf/distoro/ 以下では poky.conf の追加、preferred-gpe-versions-2.6.inc 及び preferred-gpe-versions.inc が削除されています。

conf/machine/ 以下に akita.conf が追加されています。

akita (Zaurus SL-C1000) 及び spitz (Zaurus SL-C3000) は、弊社が提供する Lineo uLinux が初期搭載されていました。また、Linux Zaurus の初代モデルには前身である Lineo の embedix が初期搭載されていました。このような経緯から、弊社が Yocto Project に参加した際の紹介記事の中でも、Sharp Zaurus の開発に携わったことについて言及されていました。

ディストリビューションの定義ファイルも作成し、2006 年 2 月 10 日の poky1.0 のリリースに向けて開発が進められていくことになります。

4. 次号予告

次回は "Yocto Project 始めます その1" と題して、実際に Yocto Project の poky を入手して構築を行い簡単なカスタマイズを行うまで複数回の連載記事の第一回目をお届けする予定です。 今回の記事の続きは、2022 年 10 月のブログに掲載予定です。

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

ウィンドウシステム 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 日 マーケティング統括部