SlideShare une entreprise Scribd logo
1  sur  10
Télécharger pour lire hors ligne
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 開発環境構築 
まず開発環境を構築します。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 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
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
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
必ず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
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
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
終的なレシピではこの変更が反映されているはずです。実行して確認してみましょう。そのまま実行すると大 
量の出力が行われますので、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
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

Contenu connexe

Tendances

GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版
GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版
GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版Netwalker lab kapper
 
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るshimadah
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と DockerのキホンNaoki Nagazumi
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウchancelab
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはwata2ki
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All ThingsUnityTechnologiesJapan002
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門VirtualTech Japan Inc.
 
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達Yusuke Wada
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディングTakuya ASADA
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステムl_b__
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までMasahito Zembutsu
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動uchan_nos
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するYoshifumi Kawai
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)NTT DATA Technology & Innovation
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達l_b__
 

Tendances (20)

GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版
GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版
GPD-WIN、Windows10タブレットに各種Linuxディストリを入れて改造してみた 2017年度名古屋版
 
Yoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作るYoctoで綺麗なkernel configを作る
Yoctoで綺麗なkernel configを作る
 
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
そろそろ知っておきたい!!コンテナ技術とDockerのキホンそろそろ知っておきたい!!コンテナ技術とDockerのキホン
そろそろ知っておきたい!!コンテナ技術と Dockerのキホン
 
Android起動周りのノウハウ
Android起動周りのノウハウAndroid起動周りのノウハウ
Android起動周りのノウハウ
 
YoctoでLTSディストリを作るには
YoctoでLTSディストリを作るにはYoctoでLTSディストリを作るには
YoctoでLTSディストリを作るには
 
Keystone fernet token
Keystone fernet tokenKeystone fernet token
Keystone fernet token
 
【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things【Unite Tokyo 2019】Understanding C# Struct All Things
【Unite Tokyo 2019】Understanding C# Struct All Things
 
Glibc malloc internal
Glibc malloc internalGlibc malloc internal
Glibc malloc internal
 
Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門Linux KVMではじめるカンタン仮想化入門
Linux KVMではじめるカンタン仮想化入門
 
入門 シェル実装
入門 シェル実装入門 シェル実装
入門 シェル実装
 
僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達僕がつくった 70個のうちの48個のWebサービス達
僕がつくった 70個のうちの48個のWebサービス達
 
仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング仮想化環境におけるパケットフォワーディング
仮想化環境におけるパケットフォワーディング
 
Androidの新ビルドシステム
Androidの新ビルドシステムAndroidの新ビルドシステム
Androidの新ビルドシステム
 
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応までDocker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
Docker Compose入門~今日から始めるComposeの初歩からswarm mode対応まで
 
ZynqMPのQEMU
ZynqMPのQEMUZynqMPのQEMU
ZynqMPのQEMU
 
Qt creatorでremote_debug
Qt creatorでremote_debugQt creatorでremote_debug
Qt creatorでremote_debug
 
UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動UEFIによるELFバイナリの起動
UEFIによるELFバイナリの起動
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
コンテナセキュリティにおける権限制御(OCHaCafe5 #3 Kubernetes のセキュリティ 発表資料)
 
PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達PF開発に使えるAOSPのツール達
PF開発に使えるAOSPのツール達
 

Similaire à Yocto Project ハンズオン / 参加者用資料

【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondTaisuke Yamada
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATETomofumi Yagi
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くTetsuyuki Kobayashi
 
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchUEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchYuma Ohgami
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2Tomofumi Yagi
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなしTsuyoshi Yamada
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1Kotaro Noyama
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西Masahide Yamamoto
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jAkira Yoshiyama
 
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Netwalker lab kapper
 
Xenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel EdisonXenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel Edisontakara kasai
 
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-Toyohiko Komatsu
 
qemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみたqemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみたKazuhiro Nishiyama
 
openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門Fuminobu Takeyama
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Etsuji Nakai
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」aitc_jp
 

Similaire à Yocto Project ハンズオン / 参加者用資料 (20)

【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
Metro
MetroMetro
Metro
 
Infinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every secondInfinite Debian - Platform for mass-producing system every second
Infinite Debian - Platform for mass-producing system every second
 
LibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATELibreOffice を Windows 上でビルドする UPDATE
LibreOffice を Windows 上でビルドする UPDATE
 
Linuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書くLinuxのユーザーランドをinitから全てまるごとgolangで書く
Linuxのユーザーランドをinitから全てまるごとgolangで書く
 
20230128.pptx
20230128.pptx20230128.pptx
20230128.pptx
 
UEFIで始めるLinux From Scratch
UEFIで始めるLinux From ScratchUEFIで始めるLinux From Scratch
UEFIで始めるLinux From Scratch
 
LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2LibreOffice を Windows 上でビルドする UPDATE2
LibreOffice を Windows 上でビルドする UPDATE2
 
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
20130126 第2回福岡debian勉強会 debian wheezyとdebian installerのはなし
 
CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1CloudFoundry 2 on Apache CloudStack 4.2.1
CloudFoundry 2 on Apache CloudStack 4.2.1
 
Code ignitertalk 01
Code ignitertalk 01Code ignitertalk 01
Code ignitertalk 01
 
第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西第一回コンテナ情報交換会@関西
第一回コンテナ情報交換会@関西
 
Osc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 jOsc201703 tokyo-clonezilla-v1.2 j
Osc201703 tokyo-clonezilla-v1.2 j
 
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
Windows10タブレットにUbuntu16.04を色々入れてみた 2016年度版 Install Ubuntu16.04 on Windows10 T...
 
Xenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel EdisonXenomai-3.0 on Ubilinux with Intel Edison
Xenomai-3.0 on Ubilinux with Intel Edison
 
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-Windows subsystem for linuxで始める組み込みlinux  ラズパイ3のブートイメージを作ってみる-
Windows subsystem for linuxで始める組み込みlinux ラズパイ3のブートイメージを作ってみる-
 
qemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみたqemuのriscv64にDebianを入れてみた
qemuのriscv64にDebianを入れてみた
 
openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門openSUSE におけるパッケージ管理入門
openSUSE におけるパッケージ管理入門
 
Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会Docker with RHEL7 技術勉強会
Docker with RHEL7 技術勉強会
 
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
2017年05月27日 AITCシニア技術者勉強会 第6回「OpenCV入門」
 

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