yoctoではクロスコンパイル用のSDKを簡単に作成することができる。
実はセルフコンパイル環境もさほど難しくなく作成できるが、こちらはあまり知られていない気がする。
クロスコンパイルできる環境があれば、PCのほうがリソースはリッチなのでコンパイル時間も短くて住むので、セルフコンパイル環境を構築する必要性を感じないかもしれない。
しかし、Makefileなどがセルフコンパイルにしか対応していない場合などで、 クロスコンパイル対応が難しい場合など、手っ取り早くセルフコンパイルしたい場合がある。
(EXTRA_)IMAGE_FEATURESを設定することで、セルフコンパイル環境が作成できることを調査したのでメモ。
環境構築
ラズベリーパイ3向けの環境。いつものやつ。
ソース取得
$ mkdir -p rpi-sumo/layers $ cd rpi-sumo/layers $ git clone git://git.yoctoproject.org/poky.git -b sumo $ git clone git://git.yoctoproject.org/meta-raspberrypi -b sumo $ git clone git://git.openembedded.org/meta-openembedded -b sumo $ cd ../
環境変数設定
$ source layers/poky/oe-init-build-env build
自動的にビルドディレクトリに移動される。 これで、bitbake関連のツールが使用可能になる。
レイヤ追加
$ bitbake-layers add-layer ../layers/meta-openembedded/meta-oe $ bitbake-layers add-layer ../layers/meta-openembedded/meta-python $ bitbake-layers add-layer ../layers/meta-openembedded/meta-networking $ bitbake-layers add-layer ../layers/meta-raspberrypi/
local.confの修正
MACHINEの行を修正する。
MACHINE = "raspberrypi3" DL_DIR ?= "${TOPDIR}/../downloads" # enable uart ENABLE_UART = "1" # systemd DISTRO_FEATURES_append = " systemd pam" VIRTUAL-RUNTIME_init_manager = "systemd" DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit" VIRTUAL-RUNTIME_initscripts = ""
セルフコンパイル環境の調査
セルフコンパイル環境を含んでいると見られるイメージには次の2つがある。
これらにはそれぞれ「-sdk」がついていないイメージがある。
- core-image-lsb
- core-image-sato
「bitbake -e」で「IMAGE_FEATURES」変数を見てみる。
$ bitbake core-image-lsb -e | grep '^IMAGE_FEATURES=' IMAGE_FEATURES="debug-tweaks hwcodecs package-management splash ssh-server-openssh" $ bitbake core-image-lsb-sdk -e | grep '^IMAGE_FEATURES=' IMAGE_FEATURES="debug-tweaks dev-pkgs eclipse-debug hwcodecs package-management splash ssh-server-openssh tools-debug tools-profile tools-sdk tools-testapps" $ bitbake core-image-sato -e | grep '^IMAGE_FEATURES=' IMAGE_FEATURES="debug-tweaks hwcodecs package-management splash ssh-server-dropbear x11-base x11-sato" $ bitbake core-image-sato-sdk -e | grep '^IMAGE_FEATURES=' IMAGE_FEATURES="debug-tweaks dev-pkgs eclipse-debug hwcodecs package-management splash ssh-server-openssh tools-debug tools-profile tools-sdk tools-testapps x11-base x11-sato"
それぞれのイメージで「-sdk」によって追加されるは次のようになっている。
「core-image-base-sdk」のようなイメージは標準では存在しないので、「core-image-base」に対して「sdk」相当の機能を追加するには、これら6つの機能を「IMAGE_FEATURES」に追加してやればよい。
ただしlocal.conf
からは「IMAGE_FEATURES」変数を操作することは推奨されていない1ので「EXTRA_IMAGE_FEATURES」変数に追加する。
local.confに次の内容を追加する。
EXTRA_IMAGE_FEATURES_append = " dev-pkgs eclipse-debug tools-debug tools-profile tools-sdk tools-testapp"
エラー
ERROR: Nothing PROVIDES 'core-image-base' core-image-base was skipped: 'tools-testapp' in IMAGE_FEATURES (added via EXTRA_IMAGE_FEATURES) is not a valid image feature. Valid features: allow-empty-password dbg-pkgs debug-tweaks dev-pkgs doc doc-pkgs eclipse-debug empty-root-password hwcodecs nfs-client nfs-server package-management post-install-logging ptest-pkgs read-only-rootfs splash ssh-server-dropbear ssh-server-openssh staticdev-pkgs tools-debug tools-profile tools-sdk tools-testapps x11 x11-base x11-sato
tools-testapp
が原因でエラーが発生したので削除する。
EXTRA_IMAGE_FEATURES_append = " dev-pkgs eclipse-debug tools-debug tools-profile tools-sdk"
その他のツール
cmakeやgitなどはインストールされないので、必要に応じて追加する。
IMAGE_INSTALL_append = " git cmake"
-
best practices dictate using IMAGE_FEATURES from within a recipe and using EXTRA_IMAGE_FEATURES from within your local.conf file, which is found in the Build Directory.↩