Mais conteúdo relacionado Semelhante a Yocto Project ハンズオン / 参加者用資料 (20) Yocto Project ハンズオン / 参加者用資料1. Yocto Project ハンズオン
岩松信洋
iwamatsu@nigauri.org / @iwamatsu
2014/09/27
1 はじめに
本ハンズオンではYocto Project で公開されているPoky を使ってLinux OS イメージを構築、起動、イ
メージの修正等を行います。Poky の基本的な使い方が理解できることを目的としています。
本ハンズオンで利用する環境は以下の通りです。
Poky: バージョン1.6.1
利用するLinux ディストリビューション: Ubuntu 12.04 LTS
ターゲットハードウェア: QEMU/ARM
ビルド用マシン: CPU 12 コア/ メモリ64GB / ディスク100GB (さくらインターネットさん提供)
今回主催者側でビルド用マシンを用意しています。参加登録時にSSH 公開鍵の送付をお願いしています。
各自そのSSH 環境でビルド用マシンにログインしてください。端末としてGNU/Linux をお使いの方は以
下のようにしてログインできます。
$ ssh ubuntu@ビルド用マシンのIP のアドレス
1.1 本ドキュメントの表記について
コマンドの$ はユーザによる実行を意味しています。
コマンドの# はroot による実行を意味しています。
コマンドのn は続けて入力することを意味しています。
テキストファイル変更方法は全てvi で統一しています。emacs などを使いたい方は別途インストール
してください。
$ sudo apt-get install emacs
1
2. 2 開発環境構築
まず開発環境を構築します。Poky を利用する使ってビルドするために必要なソフトウェアをビルド用マシ
ンにインストールします。Debian / Ubuntu の場合は以下のように実行します。
1. sudo apt-get update を実行する
$ sudo apt-get update
2. sudo apt-get upgrade を実行する
$ sudo apt-get upgrade
3. 開発環境に必要なパッケージをインストールする
$ sudo apt-get install gawk wget git-core diffstat unzip texinfo gcc-multilib
build-essential chrpath libsdl1.2-dev xterm
2.1 Poky のダウンロード
Yocto Project で提供されているリファレンスビルドシステム、Poky をダウンロードします。Yocto
Project のWeb サイトからtar ボールを取得することもできますが、今回はバージョン管理システムで管理
されているソースコードを取得する方法で説明します。
1. ホームディレクトリに移動する
$ cd
2. yocto ディレクトリを作成し、移動する
$ mkdir yocto
$ cd yocto
3. Poky のGit リポジトリをクローンする
$ git clone git://git.yoctoproject.org/poky
4. poky ディレクトリに移動する
$ cd poky
5. yocto-1.6.1 タグをyocto-handson ローカルブランチとしてチェックアウトする。
$ git checkout -b yocto-handson yocto-1.6.1
2
3. 3 Poky ディレクトリレイアウト
Poky のディレクトリがどのようになっているのか確認します。
$ ls
LICENSE README.hardware documentation meta-selftest meta-yocto oe-init-build-env scripts
README bitbake meta meta-skeleton meta-yocto-bsp oe-init-build-env-memres
LICENSE: Poky で提供されるレシピ等のライセンス
bitbake: BitBake ユーティリティ
documentation: ドキュメントソース
scripts: サポートスクリプト
meta/conf: 主要な設定ファイル群。bitbake の設定やリファレンスボード用の設定など。
meta/classes: BitBake クラスファイル群
meta/recipes-* : レシピ
meta-yocto : Yocto で管理されるレシピ等
4 Linux OS イメージをビルドする
ではPoky を使ってLinux OS イメージをビルドしましょう。Poky では以下のリファレンスイメージが提
供されています。
core-image-minimal
Unix の基本的な操作ができるLinux OS イメージを提供するレシピ
core-image-sato
matchbox をベースとしたLinux OS イメージを提供するレシピ
core-imagte-x11
x11 の基本部分を含んだLinux OS イメージを提供するレシピ
core-image-weston
Wayland/Weston の基本部分を含んだLinux OS イメージを提供するレシピ
core-image-lsb
Linux Standard Base に準拠したLinux OS イメージを提供するレシピ
今回はcore-image-minimal をターゲットにしてビルドします。
4.1 BitBake が動作する環境の構築
Poky ではBitBake と呼ばれるビルドツールを使ってLinux OS イメージをビルドします(BitBake は
Poky に含まれています)。BitBake は専用の環境変数を設定しないと正しく動作しません。Poky にはこの環
境変数を設定するためのツールoe-init-build-env が用意されているので、これを実行します。
3
4. 1. ~/yocto ディレクトリに移動する
$ cd ~/yocto
2. oe-init-build-env を実行する
$ source poky/oe-init-build-env build_qemuarm
3. pwd コマンドを実行し、カレントディレクトリを確認する
$ pwd
/home/ubuntu/yocto/build_qemuarm
oe-init-build-env 実行後、/home/ubuntu/yocto/build qemuarm ディレクトリに移動しているこ
とを確認してください。build qemuarm ディレクトリにはconf ディレクトリがあり、この中にbblay-ers.
conf とlocal.conf の2つのファイルが作成されています。この2 つのファイルの内容を確認してみま
しょう。
4.2 conf/bblayers.conf の確認
bblayers.conf ではビルドに必要なレイヤーを指定します。指定されているレイヤーはビルド時に指定さ
れているレイヤーで提供されているレシピが全て読み込まれ、ビルドに内容に反映されます。
LCONF_VERSION = 6
BBPATH = $fTOPDIRg
BBFILES ?=
BBLAYERS ?=
/home/ubuntu/yocto/poky/meta
/home/ubuntu/yocto/poky/meta-yocto
/home/ubuntu/yocto/poky/meta-yocto-bsp
BBLAYERS_NON_REMOVABLE ?=
/home/ubuntu/yocto/poky/meta
/home/ubuntu/yocto/poky/meta-yocto
4.3 conf/local.conf の確認と編集
local.conf ではbitbake に与える変数を設定します。例えば、ビルドターゲット、CPU アーキテクチャ、
ソースコード格納ディレクトリ、ハードウェア機能などです。
今回はqemuarm をターゲットとしてビルドします。ターゲットはMACHINE という変数で指定
します。デフォルトではMACHINE ??= qemux86となっており、qemux86 が指定されています。
qemuarm を有効にするために#MACHINE ?= qemuarmの行頭にある# を削除してください。
$ vi conf/local.conf
......
MACHINE ?= qemuarm
行頭の#を削除する
4
5. 4.4 ビルド
ビルドする準備が整いましたので、実際にビルドしてみましょう。ビルドするにはbitbake にビルドした
いレシピ名を指定します。今回はcore-image-minimal イメージをビルドしますので、以下のように実行
します。今回のビルド環境では完了までに約30 分ほどかかります。
$ bitbake core-image-minimal
5 Linux イメージを起動する
ビルドが完了したら、Linux OS イメージを起動してみましょう。起動するには以下のコマンドを実行し
ます。
$ runqemu qemuarm nographic
Note: nographic オプションについて
nographic を付けない場合、別のウィンドウが開いてその中でLinux が立ち上があります。今回のハンズオンでは
リモート環境で実施している都合でウィンドウを開くことができないためこのオプションを使用します。
実行するとsudo のパスワードを求められるので、パスワードyoctohandson を入力してください。
Continuing with the following parameters:
KERNEL: [/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/zImage-qemuarm.bin]
ROOTFS:
[/home/ubuntu/yocto/build_qemuarm/tmp/deploy/images/qemuarm/core-image-minimal-
qemuarm-20140926010952.rootfs.ext3]
FSTYPE: [ext3]
Setting up tap interface under sudo
[sudo] password for ubuntu:
.....
random: dd urandom read with 86 bits of entropy available
random: nonblocking pool is initialized
Poky (Yocto Project Reference Distro) 1.6.1 qemuarm /dev/ttyAMA0
qemuarm login:
起動できましたでしょうか。起動できたらログインしていろいろ触ってみましょう。ログインユーザは
root、パスワードは必要ありません。
終了するには以下のコマンドを実行します。
注意: shutdown 時の注意
5
6. 必ずQEMU 上で実行してください。
# shutdown -h now
QEMU が終わらない場合はCtrl+A x (Ctrl とA を同時に押した後、x を押す)を押すと、QEMU
が終了します。
6 カスタムイメージレシピを作成する
core-image-minimal をベースにカスタムイメージを作ってみましょう。core-image-minimal のレシ
ピはpoky/meta/recipes-core/images/core-image-minimal.bb にあります。このファイルを直接編
集してカスタムイメージを作ってもよいのですが、これでは変更内容をpoky 内で管理することになります。
正しい方法は変更内容を管理するレイヤーを作成し、このレイヤーでレシピの変更内容等を管理することで
す。そのためにはまずレイヤーを作る必要があります。
6.1 カスタム用レイヤーを作成する
カスタム用レイヤーを作成する場合、エディタ等で設定ファイルを一から作成することもできるのですが、
今回はレイヤーの雛形を作成してくれるyocto-layer スクリプトを使ってみます。これはpoky で提供され
ています。
1. ~yocto ディレクトリに移動する
$ cd ~yocto
2. yocto-layer を実行する
yocto-layer にcreate オプションと作成したいレイヤーの名前を指定して実行します。今回は
handson という名前のレイヤーを作成します。途中で質問されますが、全てエンターキーを押してく
ださい。完了するとレイヤー名にmeta-というプレフィックスが付加されたディレクトリが作成され
ます。
$ yocto-layer create handson
Please enter the layer priority you'd like to use for the layer: [default: 6]
Would you like to have an example recipe created? (y/n) [default: n]
Would you like to have an example bbappend file created? (y/n) [default: n]
New layer created in meta-handson.
Don't forget to add it to your BBLAYERS (for details see meta-handson$$README).
3. meta-handson ディレクトリがあるか確認する
$ ls
build_qemuarm meta-handson poky
6
7. 6.2 core-image-minimal レシピにパッケージを追加する
core-image-minimal イメージにパッケージを追加します。パッケージは何でもよいのですが、今回は
dropbear (SSH サーバ) を追加します。パッケージを追加方法はいくつかありますが、今回はcore-image-minimal
レシピに修正を加えるためのcore-image-minimal.bbappend ファイルを作成する方法を使い
ます。
1. meta-handson ディレクトリに移動し、recipes-core/images ディレクトリを作成する
$ cd meta-handson
$ mkdir -p recipes-core/images
2. エディタでrecipes-core/images/core-image-minimal.bbappend ファイルを開く
$ vi recipes-core/images/core-image-minimal.bbappend
3. 下記の内容を書き込み、エディタを終了する
IMAGE_INSTALL += dropbear
7 カスタムイメージレシピをビルドし起動する
先ほど作成したhandson レイヤーを使ったカスタムイメージレシピをビルドしてみましょう。
7.1 作成したmeta-handson レイヤーをbblayers.conf に追加する
今の状態ではmeta-handson レイヤーが利用できる状態ではありません。conf/bblayers.conf に追加
する必要があります。
1. ~/yocto/build qemuarm に移動する
$ cd ~/yocto/build qemuarm
2. conf/bblayers.conf をエディタで開き、meta-handson レイヤーのパスを追加する。
$ vi conf/bblayers.conf
7
8. LCONF_VERSION = 6
BBPATH = $fTOPDIRg
BBFILES ?=
BBLAYERS ?=
/home/ubuntu/yocto/poky/meta
/home/ubuntu/yocto/poky/meta-yocto
/home/ubuntu/yocto/poky/meta-yocto-bsp
/home/ubuntu/yocto/meta-handson
meta-handson レイヤーのパスを追加
BBLAYERS_NON_REMOVABLE ?=
/home/ubuntu/yocto/poky/meta
/home/ubuntu/yocto/poky/meta-yocto
7.2 meta-handson レイヤーが有効になっているか確認する
ビルドの前に修正が反映されているか確認してみましょう。まず、作成したmeta-handson レイヤーが有
効になっているか確認します。確認するにはbitbake-layers コマンドのshow-layers オプションを指定し
ます。実行すると以下のように出力され、リストにmeta-handson あることを確認できます。
$ bitbake-layers show-layers
layer path priority
==========================================================================
meta /home/ubuntu/yocto/poky/meta 5
meta-yocto /home/ubuntu/yocto/poky/meta-yocto 5
meta-yocto-bsp /home/ubuntu/yocto/poky/meta-yocto-bsp 5
meta-handson /home/ubuntu/yocto/meta-handson 6
7.3 core-image-minimal.bbappend の適用を確認する
次にcore-image-minimal レシピに修正を行うcore-image-minimal.bbappend が適用されるか確
認します。確認するにはbitbake-layers コマンドのshow-appends オプションを指定します。実行する
と以下のように出力され、リストにcore-image-minimal.bb の追加用レシピとしてmeta-handson に
あるcore-image-minimal.bbappend が指定されていることが確認できます。
$ bitbake-layers show-appends
Parsing recipes..done.
=== Appended recipes ===
中略
core-image-minimal.bb:
/home/ubuntu/yocto/meta-handson/recipes-core/images/core-image-minimal.bbappend
省略
7.4 実際にcore-image-minimal.bbappend の内容が適用されるか確認する
最後にcore-image-minimal.bbappend の内容が適用されるか確認します。bitbake コマンド
に-e オプションを付けて実行すると指定したレシピの最終的な内容が出力されます。core-image-minimal.
bbappend ではIMAGE INSTALL 変数にdropbear を追加する修正を行っているので、最
8
9. 終的なレシピではこの変更が反映されているはずです。実行して確認してみましょう。そのまま実行すると大
量の出力が行われますので、grep を使ってIMAGE INSTALL を検索します。
$ bitbake -e core-image-minimal | grep ^IMAGE_INSTALL=
IMAGE_INSTALL=packagegroup-core-boot run-postinsts dropbear
7.5 core-image-minimal をビルドして起動する
ビルドして作成されたイメージを起動してみましょう。ビルド方法と起動方法は最初の方法と同じです。
$ bitbake core-image-minimal
$ runqemu qemuarm nographic
7.6 dropbear の動作確認
起動したら、ログインしてdropbear が起動しているか確認してみましょう。ps コマンドの結果を
dropbear でgrep するのが簡単でしょう。
root@qemuarm:~# ps | grep dropbear
274 root 2300 S /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_hos
292 root 2252 S grep dropbear
またdropbear はSSH サーバとクライアントを提供しますので、ビルドサーバから起動しているイメー
ジにログインすることもできます。
1. 起動しているイメージに割り振られているIP アドレスを確認する
ifcon 10. g コマンドで割り当てられているIP とアドレスを確認できます。以下の結果ではIP アドレ
スとして192.168.7.2 が割り当てられています。
root@qemuarm:~# ifconfig eth0 | grep inet addr
起動しているイメージ上で実行
inet addr:192.168.7.2 Bcast:192.168.7.255 Mask:255.255.255.0
2. ビルドマシンから起動しているイメージにSSH でログインする
(a)作業用PC で、もうひとつターミナルソフトウェアを立ち上げます。
(b)新しく立ち上げたターミナルソフトウェアからビルド用マシンにログインします。
(c)SSH でビルド用マシンから起動しているイメージにログインします。
$ ssh root@192.168.7.2
ビルドマシンから実行
終了するには以下のコマンドを実行します。
注意: shutdown 時の注意
必ずQEMU 上で実行してください。
9
11. # shutdown -h now
8 実機向けイメージをビルドする
TBD
付録A レシピの内容を見る
meta/recipes-core/zlib/zlib 1.2.8.bb
{ HOMEPAGE
{ SECTION
{ LICENSE
{ LIC FILES CHKSUM
{ SRC URI
{ SRC URI[md5sum]
{ SRC URI[sha256sum]
{ RDEPENDS
{ do con 12. gure
{ do compile
{ do install
meta/recipes-core/coreutils/coreutils 8.22.bb
{ SUMMARY
{ DESCRIPTION
{ HOMEPAGE
{ BUGTRACKER
{ DEPENDS
{ EXTRA OECONF
{ PACKAGECONFIG
{ do compile prepend
{ do install append
10