2022 年 08 月 19 日 Yocto Project よもやま話
先月予告しました、今回は「Yocto への道」と題して、今日に至る Yocto Project の配布物 poky に関する情報を提供していきます。
Yocto Project では、プロジェクトの名称について "Yocto" 単独では使用せず、"Yocto Project" と、"Project" を含んで表記しています。Yocto と単独での表記は、Yocto Project の git server の poky において、バージョンと対になって yocto-4.0 等の Tag 名で使用されています。
複数回にわたって、Yocto Project の現在に至るまでの経緯を「Yocto への道」として紹介していきます。
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 名などに採用されています。
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 月と予測しており、どの地名が採用されるのか今から楽しみにしています。
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 と併せて、日本との関わりを探ってみたくもあります。
2005/8/31 最初のコミットは openembedded project の metadata の複製です。
この時点で poky というディレクトリ名が使われています。
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 の開発当初はレシピとパッケージを厳密に定義していなかった時代の名残となります。
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 $
conf/distro ディレクトリ内では、openembedded に合流した famillar-linux と openzaurus 及び maemo が提供されています。
conf/machine ディレクトリ内では、SHARP の zaurus 向け、HP の ipaq/jornada 向け、nokia のタブレット端末向けの複数のマシン定義に混じって、現在では inc として提供される SoC 向けの共通定義ファイルも conf として提供されていました。
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 がサンプルとして記載されています。
前述のとおり、この時代の 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
openemnedded のメタデータの取得後、bitbake の取得、プロジェクト固有の初期化ファイル・readme ファイル・環境設定スクリプトが登録された状態となります。
$ 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 $
主な追加ファイルについて
$ 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 を使用する設定となっています。
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
ここまで poky プロジェクトとして、openzaurus をディストリビューションとして使用していましたが、2005 年 11 月 16 日、poky.conf が作成され、ディストリビューションの形が整ってきます。
2005/08/31 以降 2005/11/16 までの間に、追加変更のあった主なファイルを紹介します。
$ 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)が追加されています。
$ 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 が追加されています。
ディストリビューションの定義ファイルも作成し、2006 年 2 月 10 日の poky1.0 のリリースに向けて開発が進められていくことになります。
次回は "Yocto Project 始めます その1" と題して、実際に Yocto Project の poky を入手して構築を行い簡単なカスタマイズを行うまで複数回の連載記事の第一回目をお届けする予定です。 今回の記事の続きは、2022 年 10 月のブログに掲載予定です。
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 日 マーケティング統括部