yocto project ハンズオン プレゼン用資料

58
Yocto Project ハンズオン Yocto Project 勉強会 #2 岩松 信洋 2014 9 27

Upload: nobuhiro-iwamatsu

Post on 24-May-2015

3.820 views

Category:

Technology


16 download

DESCRIPTION

Yocto Project ハンズオン プレゼン用資料です。

TRANSCRIPT

Page 1: Yocto Project ハンズオン プレゼン用資料

Yocto Project ハンズオンYocto Project 勉強会 #2

岩松 信洋

2014年 9月 27日

Page 2: Yocto Project ハンズオン プレゼン用資料

スポンサー

Page 3: Yocto Project ハンズオン プレゼン用資料

スポンサー

▶ 会場スポンサー: 株式会社豆蔵

▶ ビルド用マシンスポンサー: 株式会社さくらインターネット

Page 4: Yocto Project ハンズオン プレゼン用資料

自己紹介

▶ 岩松 信洋 (いわまつ のぶひろ)/ @iwamatsu

▶ Yocto Project meta-renesas メンテナ (Renesas ARMSoCs)

▶ U-Boot SH / Renesas ARM SoCs メンテナ▶ Debian Project Officail Developer

Page 5: Yocto Project ハンズオン プレゼン用資料

Agenda

1. Yocto Project とは

2. Poky とは

3. ハンズオンについて

4. ドキュメントの表記について

5. 開発環境構築 Pokyディレクトリレイアウト

6. Linux OS イメージをビルドする

7. Linux OSイメージを起動する

8. カスタムイメージレシピを作成する

9. カスタムイメージレシピをビルドし起動する

10. 実機向けイメージをビルドする

11. 付録: レシピの内容を見る

Page 6: Yocto Project ハンズオン プレゼン用資料

Yocto Projectとは

Page 7: Yocto Project ハンズオン プレゼン用資料

Yocto Project とは

▶ Yocto Project(https://www.yoctoproject.org/)はThe Linux Foundationが後援する組込み Linux に特化したコラボレーション・プロジェクト。

▶ プロジェクト名にある Yocto(ヤクト)は国際単位系(SI)における最小単位の一つで、10−24 を意味する。

▶ Linuxディストリビューション構築に必要なビルドツールやソフトウェアのビルドに必要な情報、操作用 GUIなどの異なった要素を持ったいくつかのプロジェクトによって開発プロセスを構成する形をとっている。

▶ ユーザは Poky と呼ばれる 各プロジェクトの成果がまとめられたツールを使ってユーザ自身でソフトウェアのビルドを行い、独自の Linuxディストリビューションを構築する。

Page 8: Yocto Project ハンズオン プレゼン用資料

Pokyとは

Page 9: Yocto Project ハンズオン プレゼン用資料

Pokyとは

▶ 組み込み向け Linux ディストリビューションビルドツール。

▶ eglibc, prelink, pseudo, swabber などのツールが含まれる。

▶ x86 (32bit と 64 bit), ARM, MIPS, PPC のアーキテクチャをサポートしている。

▶ ビルドシステムとコアとなるメタデータ(レシピ)をOpenEmbedded コミュニティと共に開発し、共有している。

Page 10: Yocto Project ハンズオン プレゼン用資料

Pokyとは

▶ Layer構造を使うことによって、メタデータ(レシピ)の再利用を簡単にしている。

▶ deb、ipk、rpm パッケージフォーマットをサポートしている。

▶ 6ヶ月毎のリリースサイクルを持っている。▶ 最新の安定板カーネル、ツールチェイン、ソフトウェア、ドキュメントを提供する。

▶ Eclipse plugin, Application Development Toolkit (ADT)等を提供する。

Page 11: Yocto Project ハンズオン プレゼン用資料

ハンズオンについて

Page 12: Yocto Project ハンズオン プレゼン用資料

ハンズオンについて

本ハンズオンでは Yocto Project で公開されている Poky を使って Linux OS イメージを構築、起動、イメージの修正等を行う。Poky の基本的な使い方が理解できることを目的とする。本ハンズオンで利用する環境は以下の通り。

▶ Poky: バージョン 1.6.1

▶ 利用する Linux ディストリビューション : Ubuntu12.04 LTS

▶ ターゲットハードウェア : QEMU/ARM

▶ ビルド用マシン: CPU 12コア/ メモリ 64GB / ディスク 100GB (さくらインターネットさん提供)

Page 13: Yocto Project ハンズオン プレゼン用資料

ハンズオンについて

今回主催者側で ビルド用マシンを用意しています。参加登録時に SSH公開鍵の送付をお願いしています。各自そのSSH 環境で ビルド用マシンにログインしてください。端末として GNU/Linux をお使いの方は以下のようにしてログインできます。

$ ssh ubuntu@ビルド用マシンの IPのアドレス

Page 14: Yocto Project ハンズオン プレゼン用資料

ドキュメントの表記について

Page 15: Yocto Project ハンズオン プレゼン用資料

ドキュメントの表記について

▶ コマンドの $ は ユーザによる実行を意味する。▶ コマンドの # は root による実行を意味する。▶ コマンドの \は続けて入力することを意味する。▶ テキストファイル変更方法は全て vi で統一しています。emacs などを使いたい方は別途インストールすること。

$ sudo apt-get install emacs

Page 16: Yocto Project ハンズオン プレゼン用資料

開発環境構築

Page 17: Yocto Project ハンズオン プレゼン用資料

開発環境構築まず開発環境を構築します。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

Page 18: Yocto Project ハンズオン プレゼン用資料

Pokyのダウンロード

Page 19: Yocto Project ハンズオン プレゼン用資料

Pokyのダウンロード

Yocto Projectで提供されている リファレンスビルドシステム、Pokyをダウンロードする。

1. ホームディレクトリに移動する

$ cd

2. yocto ディレクトリを作成し、移動する

$ mkdir yocto$ cd yocto

3. Poky の Gitリポジトリをクローンする

$ git clone git://git.yoctoproject.org/poky

Page 20: Yocto Project ハンズオン プレゼン用資料

Pokyのダウンロード

4. poky ディレクトリに移動する

$ cd poky

5. yocto-1.6.1 タグを yocto-handson ローカルブランチとしてチェックアウトする。

$ git checkout -b yocto-handson yocto-1.6.1

Page 21: Yocto Project ハンズオン プレゼン用資料

Pokyディレクトリレイアウト

Page 22: Yocto Project ハンズオン プレゼン用資料

PokyディレクトリレイアウトPokyのディレクトリがどのようになっているのか確認する。

$ lsLICENSE README.hardware documentation meta-selftest meta-yocto oe-init-build-env scriptsREADME 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 で管理されるレシピ等

Page 23: Yocto Project ハンズオン プレゼン用資料

Linux OS イメージをビルドする

Page 24: Yocto Project ハンズオン プレゼン用資料

Linux OS イメージをビルドするPokyで提供されるリファレンスイメージ

▶ core-image-minimalUnix の基本的な操作ができる Linux OS イメージを提供するレシピ

▶ core-image-satomatchbox をベースとした Linux OS イメージを提供するレシピ

▶ core-image-x11x11 の基本部分を含んだ Linux OS イメージを提供するレシピ

▶ core-image-westonWayland/Weston の基本部分を含んだ Linux OS イメージを提供するレシピ

▶ core-image-lsbLinux Standard Base に準拠した Linux OS イメージを提供するレシピ

Page 25: Yocto Project ハンズオン プレゼン用資料

Linux OS イメージをビルドするPokyで提供されるリファレンスイメージ

▶ core-image-minimalUnix の基本的な操作ができる Linux OS イメージを提供するレシピ

▶ core-image-satomatchbox をベースとした Linux OS イメージを提供するレシピ

▶ core-image-x11x11 の基本部分を含んだ Linux OS イメージを提供するレシピ

▶ core-image-westonWayland/Weston の基本部分を含んだ Linux OS イメージを提供するレシピ

▶ core-image-lsbLinux Standard Base に準拠した Linux OS イメージを提供するレシピ

Page 26: Yocto Project ハンズオン プレゼン用資料

BitBake が動作する環境の構築

▶ Pokyでは BitBakeと呼ばれるビルドツールを使ってLinux OS イメージをビルドする。

▶ BitBake は専用の環境変数を設定しないと正しく動作しない。

▶ Pokyにはこの環境変数を設定するためのツールoe-init-build-env が用意されているので、これを実行する。

Page 27: Yocto Project ハンズオン プレゼン用資料

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

Page 28: Yocto Project ハンズオン プレゼン用資料

BitBake が動作する環境の構築

▶ oe-init-build-env 実行後、/home/ubuntu/yocto/build qemuarm ディレクトリに移動していることを確認する。

▶ build qemuarm ディレクトリには conf ディレクトリがあり、この中に bblayers.conf と local.conf の2つのファイルが作成されている。この 2つのファイルの内容を確認する。

Page 29: Yocto Project ハンズオン プレゼン用資料

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 \"

Page 30: Yocto Project ハンズオン プレゼン用資料

conf/local.confの確認と編集

▶ local.conf では bitbake に与える変数を設定する。例えば、ビルドターゲット、CPUアーキテクチャ、ソースコード格納ディレクトリ、ハードウェア機能など

▶ 今回は qemuarm をターゲットとしてビルドする。▶ ターゲットは MACHINE という変数で指定する。デフォルトでは MACHINE ??= ”qemux86”となっており、qemux86 が指定されている。

$ vi conf/local.conf......MACHINE ?= "qemuarm" <- 行頭の #を削除する

Page 31: Yocto Project ハンズオン プレゼン用資料

ビルド

▶ ビルドするには bitbake に ビルドしたいレシピ名を指定する。

▶ 今回は core-image-minimal イメージをビルドするため、以下のように実行する。

$ bitbake core-image-minimal

Page 32: Yocto Project ハンズオン プレゼン用資料

Linux OSイメージを起動する

Page 33: Yocto Project ハンズオン プレゼン用資料

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 availablerandom: nonblocking pool is initialized

Poky (Yocto Project Reference Distro) 1.6.1 qemuarm /dev/ttyAMA0

qemuarm login:

Page 34: Yocto Project ハンズオン プレゼン用資料

Linux OSイメージを起動する

▶ ログインユーザは root、パスワードなしでログインする。

▶ 終了するには以下のコマンドを実行します。注意: 必ずQEMU 上で実行すること。

# shutdown -h now

▶ QEMUが終わらない場合は Ctrl+A x (Ctrl と A を同時に押した後、xを押す)を押すと、QEMUが終了する。

Page 35: Yocto Project ハンズオン プレゼン用資料

カスタムイメージレシピを作成する

Page 36: Yocto Project ハンズオン プレゼン用資料

カスタムイメージレシピを作成する

▶ core-image-minimal のレシピは poky/meta/recipes-core/images/core-image-minimal.bbにある。

▶ ファイルを直接編集してカスタムイメージを作ってもよいが、これでは変更内容を poky内で管理することになる。

▶ 正しい方法は変更内容を管理するレイヤーを作成し、このレイヤーでレシピの変更内容等を管理すること。

▶ そのためにはまずレイヤーを作る必要がある。

Page 37: Yocto Project ハンズオン プレゼン用資料

カスタム用レイヤーを作成する

▶ カスタム用レイヤーを作成する場合、エディタ等で設定ファイルを一から作成する。

▶ めんどくさがりな人のためにレイヤーの雛形を作成してくれる yocto-layer スクリプトがある。

▶ 今回は yocto-layer を使った方法で説明。

Page 38: Yocto Project ハンズオン プレゼン用資料

カスタム用レイヤーを作成する

1. ˜/yocto ディレクトリに移動する

$ cd ~/yocto

2. yocto-layer を実行するyocto-layer に create オプションと作成したいレイヤーの名前を指定して実行する。完了するとレイヤー名にmeta-というプレフィックスが付加されたディレクトリが作成される。

$ yocto-layer create handsonPlease 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).

Page 39: Yocto Project ハンズオン プレゼン用資料

カスタム用レイヤーを作成する

3. meta-handson ディレクトリがあるか確認する

$ lsbuild_qemuarm meta-handson poky

Page 40: Yocto Project ハンズオン プレゼン用資料

core-image-minimal レシピにパッケージを追加する

▶ core-image-minimal イメージにパッケージを追加する。▶ 今回は dropbear (SSHサーバ)を追加.

▶ パッケージを追加方法はいくつかある。▶ 今回は core-image-minimal レシピに修正を加えるための core-image-minimal.bbappend ファイルを作成する方法を使う。

Page 41: Yocto Project ハンズオン プレゼン用資料

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"

Page 42: Yocto Project ハンズオン プレゼン用資料

カスタムイメージレシピをビルドし起動する

Page 43: Yocto Project ハンズオン プレゼン用資料

カスタムイメージレシピをビルドし起動する

先ほど作成した handson レイヤーを使ったカスタムイメージレシピをビルドする。

Page 44: Yocto Project ハンズオン プレゼン用資料

作成したmeta-handsonレイヤーを bblayers.conf

に追加する

▶ 今の状態では meta-handson レイヤーが利用できる状態ではない。

▶ conf/bblayers.confに追加する必要がある。

1. ˜/yocto/build qemuarm に移動する

$ cd ~/yocto/build_qemuarm

Page 45: Yocto Project ハンズオン プレゼン用資料

作成した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 \"

Page 46: Yocto Project ハンズオン プレゼン用資料

meta-handsonレイヤーが有効になっているか確認する

▶ 作成したmeta-handsonレイヤーが有効になっているか確認する。

▶ 確認するには bitbake-layers コマンドの show-layersオプションを指定する。

$ bitbake-layers show-layerslayer path priority==========================================================================meta /home/ubuntu/yocto/poky/meta 5meta-yocto /home/ubuntu/yocto/poky/meta-yocto 5meta-yocto-bsp /home/ubuntu/yocto/poky/meta-yocto-bsp 5meta-handson /home/ubuntu/yocto/meta-handson 6

Page 47: Yocto Project ハンズオン プレゼン用資料

core-image-minimal.bbappendの適用を確認する

▶ core-image-minimal レシピに修正を行うcore-image-minimal.bbappend が適用されるか確認する。

▶ 確認するには bitbake-layers コマンドの show-appendsオプションを指定して実行する。

$ bitbake-layers show-appendsParsing recipes..done.=== Appended recipes ===<中略>core-image-minimal.bb:

/home/ubuntu/yocto/meta-handson/recipes-core/images/core-image-minimal.bbappend<省略>

Page 48: Yocto Project ハンズオン プレゼン用資料

実際に 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"

Page 49: Yocto Project ハンズオン プレゼン用資料

core-image-minimal をビルドして起動する

$ bitbake core-image-minimal$ runqemu qemuarm nographic

Page 50: Yocto Project ハンズオン プレゼン用資料

dropbear の動作確認

▶ 起動したら、ログインして dropbear が起動しているか確認する。

▶ ps コマンド の結果を dropbear で grep するのが簡単。

root@qemuarm:~# ps | grep dropbear274 root 2300 S /usr/sbin/dropbear -r /etc/dropbear/dropbear_rsa_hos292 root 2252 S grep dropbear

Page 51: Yocto Project ハンズオン プレゼン用資料

dropbear の動作確認

dropbear は SSH サーバとクライアントを提供しているので、ビルドサーバから起動しているイメージにログインすることもできる。

1. 起動しているイメージに割り振られている IPアドレスを確認するifconfig コマンドで 割り当てられている IPとアドレスを確認できる。

root@qemuarm:~# ifconfig eth0 | grep "inet addr" <- 起動しているイメージ上で実行inet addr:192.168.7.2 Bcast:192.168.7.255 Mask:255.255.255.0

Page 52: Yocto Project ハンズオン プレゼン用資料

dropbear の動作確認

2. ビルド用マシンから起動しているイメージに SSHでログインする

2.1 作業用 PCで、もうひとつターミナルソフトウェアを立ち上げる。

2.2 新しく立ち上げたターミナルソフトウェアからビルド用マシンにログインする。

2.3 SSHでビルド用マシンから起動しているイメージにログインする。

$ ssh [email protected] <- ビルド用マシンから実行

Page 53: Yocto Project ハンズオン プレゼン用資料

dropbear の動作確認

終了するには以下のコマンドを実行します。注意: 必ず QEMU 上で実行すること。

# shutdown -h now

Page 54: Yocto Project ハンズオン プレゼン用資料

実機向けイメージをビルドする

Page 55: Yocto Project ハンズオン プレゼン用資料

実機向けイメージをビルドする

TBD

Page 56: Yocto Project ハンズオン プレゼン用資料

レシピの内容を見る

Page 57: Yocto Project ハンズオン プレゼン用資料

レシピの内容を見る

▶ 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 configure▶ do compile▶ do install

Page 58: Yocto Project ハンズオン プレゼン用資料

レシピの内容を見る

▶ meta/recipes-core/coreutils/coreutils 8.22.bb

▶ SUMMARY▶ DESCRIPTION▶ HOMEPAGE▶ BUGTRACKER▶ DEPENDS▶ EXTRA OECONF▶ PACKAGECONFIG▶ do compile prepend▶ do install append