みつきんのメモ

組み込みエンジニアです。Interface誌で「Yocto Projectではじめる 組み込みLinux開発入門」連載中

Yocto Project CROPSを使ってみる

はじめに

Yocto Projectではbitbakeを実行するためのDockerコンテナを提供している。

そのコンテナはCROss PlatformS(CROPS)と呼ばれている。CROPSの詳細はSetting Up to Use CROss PlatformS (CROPS)を参照のこと。

使い方

使い方についてのざっくりな説明はgithubのリポジトリにある。

$ docker run --rm -it -v /home/myuser/mystuff:/workdir crops/poky --workdir=/workdir

/home/myuser/mystruffを実際の作業場所に置き換えると良い。

HONISTER(3.4.1)をビルドしてみる

作業場所は~/work/yocto/honisterとする。

$ mkdir -p ~/work/yocto/honister && cd ~/work/yocto/honister

ソースの取得

下記のコマンドでpokyのビルド環境をダウンロードする。

$ git clone -b honister git://git.yoctoproject.org/poky.git

CROPSの実行

docker runする時にコマンドを特に指定しない場合はbash -iされて、コンテナの中に入ることができる。

$ docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir 

一般的には、コンテナの中に入って通常通りのコマンドを実行することになる。

$ source poky/oe-init-build-env
$ bitbake core-image-minimal

コンテナ外からの実行

bashでコンテナに入った状態にならないで、bitbakeできる方法は下記のようになる。

$ docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir bash -c "source /workdir/poky/oe-init-build-env && bitbake core-image-minimal"

CROPSの実行を簡単にする

run_crops.shなどの名前で下記のような内容をシェルスクリプトを作成する。

#!/bin/sh

cmd="source /workdir/poky/oe-init-build-env"
if [ $# -gt 0 ] ; then
    cmd="${cmd} && $@"
fi

docker run --rm -it -v $(pwd):/workdir crops/poky --workdir=/workdir bash -c "${cmd}"

実行権限をつけておく。

$ chmod +x ./run_crops.sh

これをPATHの通った場所に格納しておくと下記のように実行できる。

$ run_crops.sh

run_crops.shはpokyディレクトリがある階層で実行する必要がある。

run_crops.shを使ってみる

pokyディレクトリは~/work/yocto/honisterに作成してあるので下記のようにする。

$ cd ~/work/yocto/honister
$ run_crops.sh

これでbuildディレクトリが作成されるので、必要に応じてlocal.confを編集する。

下記のようにしてbitbakeを実行できる。

$ run_crops.sh bitbake core-image-minimal

古いバージョンのビルド

古いバージョンPokyをビルドする場合、ビルド環境にUbuntu16.04などを使いたい場合がある。 その場合は、下記のようにしてベースのディストリビューションを指定することができる。

$ docker run --rm -it -v $(pwd):/workdir crops/poky:ubuntu-16.04 --workdir=/workdir 

これは、CROPSのDockerイメージにタグを打ってあるから。 使用できるベースディストリビューションdocker hubを参照すると良い。

distro-check.shの方がわかりやすいかもしれない。

下記が2022/01/14時点でサポートしているベースディストリビューションとなる。

distros["centos-7"]="CentOS Linux 7 (Core)"
distros["centos-8"]="CentOS Linux 8"
distros["debian-9"]="Debian GNU/Linux 9 (stretch)"
distros["debian-10"]="Debian GNU/Linux 10 (buster)"
distros["debian-11"]="Debian GNU/Linux 11 (bullseye)"
distros["fedora-33"]="Fedora 33 (Container Image)"
distros["fedora-34"]="Fedora 34 (Container Image)"
distros["opensuse-15.2"]="openSUSE Leap 15.2"
distros["ubuntu-16.04"]="Ubuntu 16.04"
distros["ubuntu-18.04"]="Ubuntu 18.04"
distros["ubuntu-20.04"]="Ubuntu 20.04"

まとめ

いまいち、日本語での情報が少ないCROPSについて調査してみた。

CROPSが使えるようになると、Dockerさえ動いていれば基本的にはどんな環境でもbitbakeができるので、Yocto Projectを使用するハードルは下がると思う。 (hostがarmの場合は知らん)

Windows環境でもVMやWSL2を使用するよりは、実行時パフォーマンスやサポート的なところでちょっとはマシになる気がする。