オープンソースのビルドシステムであるyoctoの使い方を簡単に紹介します。Ubuntu 12.04 LTS 64bitを使用しました。
1. ダウンロード
yoctoのビルドツールであるpokyを取得します。
$ git clone http://git.yoctoproject.org/git/poky
2. ビルド
$ . oe-init-build-env $ emacs conf/local.conf $ bitbake core-image-sato
2.1. oe-init-build-env
ビルド環境構築スクリプトのoe-init-build-envを実行するとbuildディレクトリに自動的に移動されます。
$ . oe-init-build-env
buildディレクトリ以外を指定したい場合は引数にディレクトリ名を与えます。
$ . oe-init-build-env mybuilds
2.2. conf/local.conf
CPUアーキテクチャ、スレッド数、make -jの数等の指定が可能です。
BB_NUMBER_THREADS = "8" PARALLEL_MAKE = "-j 8" MACHINE ?= "beaglebone"
MACHINEにボード(基盤)が設定され、MACHINEで設定されたファイル内でカーネルの設定、CPUアーキテクチャの設定等、ボード依存の設定項目が選ばれていきます。
YoctoはハードウェアベンダのBSP(Board Support Package)の作成を意識している為にこのような柔軟な構成になっています。
作成可能なボードの設定を確認するにはmachineディレクトリ直下のファイル を見れば良いでしょう。
$ ls ./meta-yocto-bsp/conf/machine beaglebone.conf edgerouter.conf genericx86-64.conf genericx86.conf include mpc8315e-rdb.conf $ ls meta/conf/machine include qemuarm.conf qemumips64.conf qemumips.conf qemuppc.conf qemux86-64.conf qemux86.conf
これらはあくまでYocto pokyのgitに含まれるものです。Yoctoで公開している他のリポジトリには他のボード用の設定も公開されています。
2.2.1. conf/bblayers.confとmetaディレクトリ
machineディレクトリがmetaディレクトリとmeta-yocto-bspディレクトリの二つあることが不思議に思われた方がいらっしゃるかもしれません。
conf/bblayers.confでmeta-xxxというディレクトリ郡とmetaディレクトリの設定を読み込みます。
# LAYER_CONF_VERSION is increased each time build/conf/bblayers.conf # changes incompatibly LCONF_VERSION = "6" BBPATH = "${TOPDIR}" BBFILES ?= "" BBLAYERS ?= " \ /<path-to>/poky/meta \ /<path-to>/poky/meta-yocto \ /<path-to>/poky/meta-yocto-bsp \ " BBLAYERS_NON_REMOVABLE ?= " \ /<path-to>/poky/meta \ /<path-to>/poky/meta-yocto \ "
例えばyoctoのリポジトリ群にmeta-intelというリポジトリがあり、 meta-intel/conf/machineというディレクトリを持っています。
$ ls meta-intel/conf/machine/ include intel-core2-32.conf intel-corei7-64.conf README
このintel-core2-32.confとintel-corei7-64.confをMACHINEに設定し、bblayers.confでmeta-intelを読み込むようにエントリを追加することで、外部から追加したボードの設定を利用することが可能となります。
ボードを提供するハードウェアベンダはmeta-xxxディレクトリのみを提供すれば良いことになります。
2.3. bitbake
ビルドに必要なパッケージはbitbakeを実行した段階で分かるので、適時イン ストールします。
$ bitbake core-image-sato ERROR: OE-core's config sanity checker detected a potential misconfiguration. Either fix the cause of this error or at your own risk disable the checker (see sanity.conf). Following is the list of potential problems / advisories: Please install the following missing utilities: C++ Compiler (g++),diffstat,makeinfo,gawk,chrpath ERROR: Execution of event handler 'check_sanity_eventhandler' failed ERROR: Command execution failed: Exited with 1 Summary: There were 3 ERROR messages shown, returning a non-zero exit code.
Ubuntu 12.04ではmakeinfoはtexinfoに含まれます。
3. core-image-satoについて
yoctoはレシピというファイル単位でパッケージを管理おり、各レシピは依存関係があります。
例えば、glibcを必要とするパッケージはレシピにglibcを依存することを記述します。
core-image-satoはLinuxシステムを構築するのに必要なパッケージ郡を依存するレシピです。
core-image-satoを指定するとbitbakeがレシピを解析していき、基本となるglibc等をビルドしていきます。
4. QEMUの起動
oe-init-build-envを実行した後、runqemuコマンドでQEMUが起動できます。
$ runqemu qemux86 Continuing with the following parameters: KERNEL: [/<path-to>/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin] ROOTFS: [/<path-to>/poky/build/tmp/deploy/images/qemux86/core-image-sato-qemux86-20140416162134.rootfs.ext3] FSTYPE: [ext3] Setting up tap interface under sudo Acquiring lockfile for tap0... Running qemu-system-i386... /<path-to>/Sources/poky/build/tmp/sysroots/i686-linux/usr/bin/qemu-system-i386 -kernel /<path-to>/Sources/poky/build/tmp/deploy/images/qemux86/bzImage-qemux86.bin -net nic,vlan=0 -net tap,vlan=0,ifname=tap0,script=no,downscript=no -cpu qemu32 -hda /<path-to>/Sources/poky/build/tmp/deploy/images/qemux86/core-image-sato-qemux86-20140416162134.rootfs.ext3 -show-cursor -usb -usbdevice wacom-tablet -vga vmware -no-reboot -m 256 --append "vga=0 uvesafb.mode_option=640x480-32 root=/dev/hda rw mem=256M ip=192.168.7.2::192.168.7.1:255.255.255.0 oprofile.timer=1 " VNC server running on `127.0.0.1:5900'
VNCビューアで接続すると以下の画面が得られます。
4. 容量
buildディレクトリ配下の容量は以下のようになりました。30GByteほど必要なようです。
0 bitbake.lock 2.4M cache 28K conf 2.2G downloads 2.4G sstate-cache 2.2M task-depends.dot 23G tmp