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
アルテラ社製 Cyclone V SoC搭載ボード
アルテラ SoCは、プロセッサ、ペリフェラル、およびメモリ・インタフェースで構成される Armベースのハード・プロセッサ・システム (HPS) と、カスタマイズ可能なFPGA ファブリックを広帯域幅インタコネクタ・バックボーンで統合した製品です。ハードIPには、PCI Express Gen2やマルチメモリポート、ECC、メモリ保護、高速シリアルトランシーバを搭載し、性能および消費電力の低減とプログラマブル・ロジックの柔軟性という特長を兼ね備えました。これまでCPUとFPGAで構成されたシステムボードサイズを大幅に削減することができます。今回の講座では、テラシック社製「DE0-Nano-SoC Kit/Atlas-SoC Kit」を使用します。
日本アルテラ株式会社
ローターバッハ社製 TRACE32
世界中で最も使われているハードウェアアシストデバッガTRACE32。ArmだけでなくNios IIはもちろん、70以上のプロセッサアーキテクチャをサポートしているのが、TRACE32。SMPシステムのマルチコア対応では、複数のコアを同時に制御し、参照コアを切り替えながらシームレスにデバッグを進めることができます。また、Linux等のSMP対応OSのデバッグをサポートする「OS認識機能」が標準装備されていることも特徴です。これにより、デバッグ対象のタスクが何れのコアに割り当てられているかを気にすることなく、ユーザ空間で動作しているプログラムのデバッグをスムーズに進めることができます。
日本ローターバッハ株式会社
組み込みLinux導入/開発支援サービス
組込みLinuxによりお客様の装置開発に新たな価値を提供します。
富士通コンピュータテクノロジーズ
こちらも是非
“もっと見る” 組み込みLinux|Cyclone編
Cyclone V SoCをLinuxでコンフィグしてみよう!
Cyclone V SoCの最大の特徴であるFPGAは、Linux動作中に動的にコンフィグレーションすることができます。カーネルのコンフィグとビルドをして、FPGAのコンフィグレーションをしてみましょう!
Linuxカーネルのコンフィグレーションを変えてみよう!
Cyclone V SoCのカーネルは、すぐにPreempt RTが利用できるようになっているので、動かしてみましょう!まずは、カーネルのコンフィグレーションとビルドを行います。Linuxカーネル ソースをPreempt RTのブランチに切り替えて、コンフィグレーションを有効にして、再ビルドします。
Linuxでプロファイルしてみよう!
Linuxはperfやftrace等、プロファイルやトレースを採取するツールが揃っています。TRACE32を使ったプロファイルやトレースはArmコアの機能を使って本番に近い環境で実施することができるので、Linuxで精度の高い情報を得ることができます。