Yoctoとは
Yoctoの紹介
ミリ・マイクロ・ナノと続く単位で一番小さな10-24をヨクトと呼びます。その名を由来にするYocto Projectは、BitBakeというビルドツールとOSSパッケージをビルドするためのレシピを統合し、組み込みLinuxディストリビューションを標準化するために立ち上げられたLinux Foundation傘下のプロジェクトです。
キャッチフレーズは、"Don't Build a Frankenstein OS"で、デバイス毎に継ぎ接ぎして作るのではなく、OSは共通化していこうという想いが込められています。
フランケンシュタインについては、ここのwikiも見てね!
Yoctoを開発しているのは?
この一年でYocto Projectのコードを書いたのは誰か見てみましょう。
ビルドツールであるBitBake、リファレンスディストリビューションとしてレシピを集約したPoky、基本的なOSSパッケージのレシピを集めたOpenEmbedded Core、高信頼性のための機能等のOSSパッケージのレシピを集めたCollection of OpenEmbedded、すべてにおいてIntelと子会社のWind Riverが多くの貢献をしています。全体的にはKernelと同じく、チップベンダーとLinuxディストリビューターが多くの貢献をしていますが、Collection of OpenEmbeddedに富士通がランクインしていることは覚えておいてください(笑)
順位 | 組織 | 修正パッチの数 | 全体に占める割合 |
---|---|---|---|
1 | Intel | 681 | 67.1% | 2 | Linux Foundation | 169 | 16.7% |
3 | Wind River | 25 | 2.5% |
4 | Mentor Graphics | 22 | 2.2% |
5 | Axis Communications | 9 | 0.9% |
順位 | 組織 | 修正パッチの数 | 全体に占める割合 |
---|---|---|---|
1 | Intel | 3062 | 49.7% | 2 | Wind River | 686 | 11.1% |
3 | Linux Foundation | 525 | 8.5% |
4 | Mentor Graphics | 101 | 1.6% |
5 | Axis Communications | 73 | 1.2% |
順位 | 組織 | 修正パッチの数 | 全体に占める割合 |
---|---|---|---|
1 | Intel | 2245 | 48.3% | 2 | Wind River | 647 | 13.9% |
3 | Linux Foundation | 344 | 7.4% |
4 | Mentor Graphics | 79 | 1.7% |
5 | Axis Communications | 64 | 1.4% |
順位 | 組織 | 修正パッチの数 | 全体に占める割合 |
---|---|---|---|
1 | Wind River | 282 | 17.7% | 2 | Intel | 104 | 6.5% |
3 | Fujitsu | 71 | 4.5% |
4 | Mentor Graphics | 40 | 2.5% |
5 | O.S. Systems | 38 | 2.4% |
順位 | 組織 | 修正パッチの数 | 全体に占める割合 |
---|---|---|---|
1 | Wind River | 309 | 22.8% | 2 | Fujitsu | 160 | 11.8% |
3 | Intel | 82 | 6.0% |
4 | Mentor Graphics | 34 | 2.5% |
5 | O.S. Systems | 24 | 1.8% |
Yoctoはどんなところで使われている?
チップ ベンダーが提供するLinux SDKの多くは、Yoctoをベースにしています。また、Wind RiverやMentor Graphics等の多くの組み込みシステム向けLinuxディストリビューションもYoctoをベースにしています。
今回使用しているAtlasボードにプリインストールされているAngstromもYoctoをベースにしたディストリビューションです。ちなみに、Angstromは100ピコメートルなので、Yoctoの1014倍ですね(笑)
Yoctoを使ってLinuxシステムをビルド
AtlasボードはすぐにLinuxが使えるようにAngstromがプリインストールされていますが、今回はYoctoの使い方を理解するためにYocto Projectの2016年9月時点の最新リリースである2.1.1をビルドしてみましょう。
ビルドするホストOSはUbuntu 14.04.5を使います。
Ubuntu 14.04をインストールしたら、ビルドに必要なソフトウェアをインストールします。
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib build-essential chrpath socat libsdl1.2-dev xterm make xsltproc docbook-utils fop dblatex xmlto autoconf automake libtool libglib2.0-dev libarchive-dev python-git
次に、Yocto Projectをダウンロードします。
$ git clone https://git.yoctoproject.org/git/poky
※ファイアウォールがある場合は、事前にProxyを設定します。
$ git config --global http.proxy http://ユーザー名:パスワード@Proxyサーバ名:ポート番号
Yoctoのバージョンを2.1.1にセットします。
$ cd poky $ git checkout -b yocto-2.1.1 yocto-2.1.1
パッケージ管理システムSMARTを最新版にするパッチを適用します。
https://github.com/ubinux/smart2/tree/master-next/patches-yocto/for_2.1.1 の下記パッチをダウンロード 0001-rpm-The-config-file-of-rpm-will-be-installed-into-SD.patch 0002-python-smartpm-change-smart-to-smart2.patch 0003-smart2-add-dependences-of-smart2.patch ダウンロードしたパッチをあてます。 $ patch –p1 < 0001-rpm-The-config-file-of-rpm-will-be-installed-into-SD.patch $ patch –p1 < 0002-python-smartpm-change-smart-to-smart2.patch $ patch –p1 < 0003-smart2-add-dependences-of-smart2.patch
ビルドするための初期化をします。
$ source oe-init-build-env build.armv7 build.armv7が生成され、 build.armv7に移動していることを確認します。
ターゲットの設定をします。
conf/local.confの38行目を MACHINE ??= "qemux86" から MACHINE ??= "beaglebone" に変更します。 ※今回はYoctoでビルドしたカーネルは使わないので、Cyclone V SoCと同じArmv7アーキテクチャーでPokyで標準サポートされているボードに設定します。
準備が整いました。いよいよ、ビルドしてみましょう!ダウンロードとビルドに数時間掛かると思うので、待ってられない人は、こちらからクラウド化を検討ください(笑)
OSSパッケージをビルドします。
$ bitbake core-image-sato
toolchain (GCC, Glibc等)をビルドします。
$ bitbake core-image-sato -c populate_sdk
エラーなく終了したら、ビルド完了です。
思ったより簡単にビルドできましたね?もっと詳しく知りたい人は、ここを読んでね!もっともっと詳しく知りたい人は、ここを読んでね!
SMARTを使ってパッケージを管理
SMARTはYocto Projectで採用されているパッケージ管理システムです。Red Hat/CentOS/FedoraのDNFやYum、Debian/Ubuntuのapt-getのYocto版のような位置付けです。今回はオリジナルのSMARTからフォークして改良されたSMART2(https://github.com/ubinux/smart2)を使います。
それでは、YoctoでビルドしたパッケージからSMARTを使ってシステムを構築してみましょう!
...続きは、一度上に戻って動画を見てね!(ブラウザ右下の|^|ボタンを押すと早いよ!)
$ sudo ./tmp/deploy/sdk/poky-glibc-x86_64-core-image-sato-cortexa8hf-neon-toolchain-2.1.1.sh $ . /opt/poky/2.1.1/environment-setup-cortexa8hf-neon-poky-linux-gnueabi $ export RPM_USRLIBRPM=/opt/poky/2.1.1/sysroots/cortexa8hf-neon-poky-linux-gnueabi/usr/lib/rpm/ $ export RPM_ETCRPM=/opt/poky/2.1.1/sysroots/cortexa8hf-neon-poky-linux-gnueabi/etc/rpm $ export RPM_LOCALEDIR=/opt/poky/2.1.1/sysroots/cortexa8hf-neon-poky-linux-gnueabi/usr/share/locale $ mkdir rootfs $ . /opt/poky/2.1.1/sysroots/x86_64-pokysdk-linux/usr/bin/enviroment-smart.sh $ smart --rootfs-dir=$PWD/rootfs --interface=tgui