More Related Content Similar to Yocto Project ハンズオン プレゼン用資料 (20) Yocto Project ハンズオン プレゼン用資料4. 自己紹介
▶ 岩松信洋(いわまつのぶひろ)/ @iwamatsu
▶ Yocto Project meta-renesas メンテナ(Renesas ARM
SoCs)
▶ U-Boot SH / Renesas ARM SoCs メンテナ
▶ Debian Project Officail Developer
5. Agenda
1. Yocto Project とは
2. Poky とは
3. ハンズオンについて
4. ドキュメントの表記について
5. 開発環境構築Poky ディレクトリレイアウト
6. Linux OS イメージをビルドする
7. Linux OS イメージを起動する
8. カスタムイメージレシピを作成する
9. カスタムイメージレシピをビルドし起動する
10. 実機向けイメージをビルドする
11. 付録: レシピの内容を見る
7. Yocto Project とは
▶ Yocto Project(https://www.yoctoproject.org/)は
The Linux Foundation が後援する組込みLinux に特化し
たコラボレーション・プロジェクト。
▶ プロジェクト名にあるYocto(ヤクト)は国際単位系
(SI) における最小単位の一つで、1024 を意味する。
▶ Linux ディストリビューション構築に必要なビルドツー
ルやソフトウェアのビルドに必要な情報、操作用GUI
などの異なった要素を持ったいくつかのプロジェクト
によって開発プロセスを構成する形をとっている。
▶ ユーザはPoky と呼ばれる各プロジェクトの成果がま
とめられたツールを使ってユーザ自身でソフトウェア
のビルドを行い、独自のLinux ディストリビューション
を構築する。
9. Poky とは
▶ 組み込み向けLinux ディストリビューションビルド
ツール。
▶ eglibc, prelink, pseudo, swabber などのツールが含ま
れる。
▶ x86 (32bit と64 bit), ARM, MIPS, PPC のアーキテク
チャをサポートしている。
▶ ビルドシステムとコアとなるメタデータ(レシピ)を
OpenEmbedded コミュニティと共に開発し、共有して
いる。
10. Poky とは
▶ Layer 構造を使うことによって、メタデータ(レシピ)
の再利用を簡単にしている。
▶ deb、ipk、rpm パッケージフォーマットをサポートして
いる。
▶ 6ヶ月毎のリリースサイクルを持っている。
▶ 最新の安定板カーネル、ツールチェイン、ソフトウェ
ア、ドキュメントを提供する。
▶ Eclipse plugin, Application Development Toolkit (ADT)
等を提供する。
12. ハンズオンについて
本ハンズオンではYocto Project で公開されているPoky を
使ってLinux OS イメージを構築、起動、イメージの修正等
を行う。Poky の基本的な使い方が理解できることを目的と
する。
本ハンズオンで利用する環境は以下の通り。
▶ Poky: バージョン1.6.1
▶ 利用するLinux ディストリビューション: Ubuntu
12.04 LTS
▶ ターゲットハードウェア: QEMU/ARM
▶ ビルド用マシン: CPU 12 コア/ メモリ64GB / ディス
ク100GB (さくらインターネットさん提供)
15. ドキュメントの表記について
▶ コマンドの$ はユーザによる実行を意味する。
▶ コマンドの# はroot による実行を意味する。
▶ コマンドのn は続けて入力することを意味する。
▶ テキストファイル変更方法は全てvi で統一していま
す。emacs などを使いたい方は別途インストールする
こと。
$ sudo apt-get install emacs
17. 開発環境構築
まず開発環境を構築します。Poky を利用する使ってビルド
するために必要なソフトウェアをビルド用マシンにインス
トールする。
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
19. Poky のダウンロード
Yocto Project で提供されているリファレンスビルドシステ
ム、Poky をダウンロードする。
1. ホームディレクトリに移動する
$ cd
2. yocto ディレクトリを作成し、移動する
$ mkdir yocto
$ cd yocto
3. Poky のGit リポジトリをクローンする
$ git clone git://git.yoctoproject.org/poky
20. Poky のダウンロード
4. poky ディレクトリに移動する
$ cd poky
5. yocto-1.6.1 タグをyocto-handson ローカルブランチと
してチェックアウトする。
$ git checkout -b yocto-handson yocto-1.6.1
22. 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 で管理されるレシピ等
24. Linux OS イメージをビルドする
Poky で提供されるリファレンスイメージ
▶ core-image-minimal
Unix の基本的な操作ができるLinux OS イメージを提供
するレシピ
▶ core-image-sato
matchbox をベースとしたLinux OS イメージを提供す
るレシピ
▶ core-image-x11
x11 の基本部分を含んだLinux OS イメージを提供する
レシピ
▶ core-image-weston
Wayland/Weston の基本部分を含んだLinux OS イメー
ジを提供するレシピ
▶ core-image-lsb
Linux Standard Base に準拠したLinux OS イメージを提
供するレシピ
25. Linux OS イメージをビルドする
Poky で提供されるリファレンスイメージ
▶ core-image-minimal
Unix の基本的な操作ができるLinux OS イメージを提供
するレシピ
▶ core-image-sato
matchbox をベースとしたLinux OS イメージを提供す
るレシピ
▶ core-image-x11
x11 の基本部分を含んだLinux OS イメージを提供する
レシピ
▶ core-image-weston
Wayland/Weston の基本部分を含んだLinux OS イメー
ジを提供するレシピ
▶ core-image-lsb
Linux Standard Base に準拠したLinux OS イメージを提
供するレシピ
26. BitBake が動作する環境の構築
▶ Poky ではBitBake と呼ばれるビルドツールを使って
Linux OS イメージをビルドする。
▶ BitBake は専用の環境変数を設定しないと正しく動作し
ない。
▶ Poky にはこの環境変数を設定するためのツール
oe-init-build-env が用意されているので、これを実行
する。
27. BitBake が動作する環境の構築
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
28. BitBake が動作する環境の構築
▶ oe-init-build-env 実行
後、/home/ubuntu/yocto/build qemuarm ディレクトリ
に移動していることを確認する。
▶ build qemuarm ディレクトリにはconf ディレクトリが
あり、この中にbblayers.conf とlocal.conf の2つのファ
イルが作成されている。この2 つのファイルの内容を
確認する。
29. conf/bblayers.conf の確認
▶ bblayers.conf ではビルドに必要なレイヤーを指定する。
▶ 指定されているレイヤーはビルド時に指定されている
レイヤーで提供されているレシピが全て読み込まれ、
ビルドに内容に反映される。
LCONF_VERSION = 6
BBPATH = ${TOPDIR}
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
30. conf/local.conf の確認と編集
▶ local.conf ではbitbake に与える変数を設定する。例え
ば、ビルドターゲット、CPU アーキテクチャ、ソース
コード格納ディレクトリ、ハードウェア機能など
▶ 今回はqemuarm をターゲットとしてビルドする。
▶ ターゲットはMACHINE という変数で指定する。デ
フォルトではMACHINE ??= qemux86となってお
り、qemux86 が指定されている。
$ vi conf/local.conf
......
MACHINE ?= qemuarm - 行頭の#を削除する
31. ビルド
▶ ビルドするにはbitbake にビルドしたいレシピ名を指
定する。
▶ 今回はcore-image-minimal イメージをビルドするため、
以下のように実行する。
$ bitbake core-image-minimal
33. Linux OSイメージを起動する
▶ ビルドが完了したら、Linux OS イメージを起動する。
$ runqemu qemuarm nographic
▶ 実行すると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 iwamatsu:
.....
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:
34. Linux OSイメージを起動する
▶ ログインユーザはroot、パスワードなしでログイン
する。
▶ 終了するには以下のコマンドを実行します。注意: 必ず
QEMU 上で実行すること。
# shutdown -h now
▶ QEMU が終わらない場合はCtrl+A x (Ctrl とA を
同時に押した後、x を押す)を押すと、QEMU が終了
する。
36. カスタムイメージレシピを作成する
▶ core-image-minimal のレシピはpoky/meta/recipes-
core/images/core-image-minimal.bb に
ある。
▶ ファイルを直接編集してカスタムイメージを作っても
よいが、これでは変更内容をpoky 内で管理することに
なる。
▶ 正しい方法は変更内容を管理するレイヤーを作成し、
このレイヤーでレシピの変更内容等を管理すること。
▶ そのためにはまずレイヤーを作る必要がある。
38. カスタム用レイヤーを作成する
1. ~/yocto ディレクトリに移動する
$ cd ~/yocto
2. yocto-layer を実行する
yocto-layer にcreate オプションと作成したいレイヤー
の名前を指定して実行する。完了するとレイヤー名に
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).
40. core-image-minimal レシピにパッケージを追加
する
▶ core-image-minimal イメージにパッケージを追加する。
▶ 今回はdropbear (SSH サーバ) を追加.
▶ パッケージを追加方法はいくつかある。
▶ 今回はcore-image-minimal レシピに修正を加えるため
のcore-image-minimal.bbappend ファイルを作成す
る方法を使う。
41. core-image-minimal レシピにパッケージを追加
する
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
45. 作成したmeta-handson レイヤーをbblayers.conf
に追加する
2. conf/bblayers.conf をエディタで開き、meta-handson レ
イヤーのパスを追加する。
$ vi conf/bblayers.conf
......
LCONF_VERSION = 6
BBPATH = ${TOPDIR}
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 -handson レイヤーのパスを追加}
BBLAYERS_NON_REMOVABLE ?=
/home/ubuntu/yocto/poky/meta
/home/ubuntu/yocto/poky/meta-yocto
46. meta-handson レイヤーが有効になっているか確
認する
▶ 作成したmeta-handson レイヤーが有効になっているか
確認する。
▶ 確認するにはbitbake-layers コマンドのshow-layers オプ
ションを指定する。
$ 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
47. core-image-minimal.bbappend の適用を確認する
▶ core-image-minimal レシピに修正を行う
core-image-minimal.bbappend が適用されるか確認する。
▶ 確認するにはbitbake-layers コマンドのshow-appends
オプションを指定して実行する。
$ 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
省略
48. 実際にcore-image-minimal.bbappend の内容が適
用されるか確認する
▶ bitbake コマンドに-e オプションを付けて実行すると
指定したレシピの最終的な内容が出力される
▶ core-image-minimal.bbappend ではIMAGE INSTALL 変
数にdropbear を追加する修正を行っている。
▶ よって最終的なレシピではこの変更が反映されている
はず。
▶ そのまま実行すると大量の出力が行われるため、grep
を使ってIMAGE INSTALL を検索する。
$ bitbake -e core-image-minimal | grep ^IMAGE_INSTALL=
IMAGE_INSTALL=packagegroup-core-boot run-postinsts dropbear
50. 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
51. dropbear の動作確認
dropbear はSSH サーバとクライアントを提供しているの
で、ビルドサーバから起動しているイメージにログインす
ることもできる。
1. 起動しているイメージに割り振られているIP アドレス
を確認する
ifcon 52. g コマンドで割り当てられているIP とアドレス
を確認できる。
root@qemuarm:~# ifconfig eth0 | grep inet addr - 起動しているイメージ上で実行
inet addr:192.168.7.2 Bcast:192.168.7.255 Mask:255.255.255.0
53. dropbear の動作確認
2. ビルド用マシンから起動しているイメージにSSH でロ
グインする
2.1 作業用PC で、もうひとつターミナルソフトウェアを立
ち上げる。
2.2 新しく立ち上げたターミナルソフトウェアからビルド
用マシンにログインする。
2.3 SSH でビルド用マシンから起動しているイメージにロ
グインする。
$ ssh root@192.168.7.2 - ビルド用マシンから実行