Yocto 概要
blog
2019-4-1 12:42 JST

Yocto の概要

Yocto Project はツール名称とbuild のアーキテクチャーとProject 名称がごっちゃになっていて、言葉として理解が難しい。整理されていない印象があります。

次の図は Yocto で使用されるツール Poky の Work Flow です。(Yocto Project Quick Start からコピーした PNG 画像に日本語を追加)

この図からもわかる通り、Yocto を使う(あるいは Yocto Project を使う)といいつつ、ワークフローは Poky です。しかし、実際に実行するコマンドは Poky ではなく bitbake なんです。

整理しても意味がなさそうですが、一応、書いておきます。

プロジェクト名称:Yocto Project
全体ツール名称(?):Yocto Project
ビルドシステム名称(?):Poky
メインになるツール(コマンド):bitbake

Yocto(Poky) のワークフロー

用語はあいまいなまま、何となく先に進めます。Poky は git で管理されており、 git://git.yoctoproject.org/poky から git で clone 可能です。ダウンロードすると、bitbake コマンド(実はpython のスクリプト)を含む様々な bitbake の recipe とツール群をダウンロードすることができます。このbitbak を含むシステムを Poky と呼ぶのでしょう。

通常はこれに加え各レシピ(メタデータ)とターゲットになるマシンのレシピ(メタデータ)もダウンロード(あるいは git による clone)してくる必要があります。

ターゲットの指定とどんなイメージを作るかをユーザ設定として用意します。

Poky を使うには bash から(私はいつも tcsh を使っているのでわざわざ tmux + bashの環境を立ち上げています、、、) oe-init-build-env を実行して環境を実行します。Poky 内の独自のコマンドを実行するのはこれが最初で(おそらく)最後です。あとは bitbake コマンドの実行のみです。

Poky の環境が整えば、bitbake コマンドでビルドを始めます。すると、システムはクロス開発環境を構築し始めます。ここが、今までに比べて圧倒的に簡単にしかも正確になったところです。

いままでの組み込みシステム用の開発環境は、まずクロス開発環境を自分で作らなければなりませんでした。あるいは、どこからかバイナリで持ってくる必要がありました。しかし、ちょっとした環境の違いやオペミスでクロス開発環境の構築を失敗することが多々あり、手馴れていないと、なかなか難しい作業でした。

Yocto では(Poky では?)そのホストに合わせてクロス開発環境を最初に構築してくれます。メジャーなホスト(例えば Ubuntu 12.04.1 LTS x86_64) を使っていれば、ここで苦労することは何一つありません。

次に各パッケージのレシピ(Bitbake で要求される各パッケージの作成指示書をこう呼ぶ)に従いダウンロード、コンパイルがなされます。そしてパッケージ化されます。パッケージは .rpm, .deb, .ipk が選択可能です。

最後にユーザ設定に従い、u-boot や kernel, rootfs(ext2 や ext3) を生成します。Freescale のレシピでは SD カードのイメージまで生成されます。

ユーザの設定によって ADK (SDK とも記述されていて紛らわしい)を生成することが可能です。ADK は最終的には sh 型のインストーラとして生成されます。そのインストーラを sh スクリプトとして実行すると、自己解凍したうえでクロス開発環境やライブラリが展開されます。つまり、この ADK を手渡せば、開発環境がインストールされるのです。これによりアプリケーションを作る人とkernel+rootfsなどをビルドする側をと分離することができます。ADK は Eclipse とも連携するようです(未確認)。

文章で書くと難しそうですが、作成はいたって簡単です!!


おまけ: free-electrons.com が作った pdf から図を引用します。