みつきんのメモ

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

Ubuntu 15.10でbitbake qemu-nativeエラー

Ubuntu 15.10でcore-image-satoなどを作ろうとすると、qemu-nativeのdo_configureでエラーになる。

DEBUG: Executing python function sysroot_cleansstate
DEBUG: Python function sysroot_cleansstate finished
DEBUG: Executing shell function autotools_preconfigure
DEBUG: Shell function autotools_preconfigure finished
DEBUG: Executing python function autotools_copy_aclocals
DEBUG: Python function autotools_copy_aclocals finished
DEBUG: Executing shell function do_configure

ERROR: User requested feature sdl
       configure was not able to find it.
       Install SDL devel

WARNING: exit code 1 from a shell command.

config.log

configureでのエラーの詳細をみるためconfig.logを開いてみるとdbus関連の関数が見つからないという。

/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-6.0.so: undefined reference to `dbus_watch_get_enabled@LIBDBUS_1_3'
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-6.0.so: undefined reference to `dbus_message_iter_recurse@LIBDBUS_1_3'
/usr/lib/x86_64-linux-gnu/pulseaudio/libpulsecommon-6.0.so: undefined reference to `dbus_connection_unref@LIBDBUS_1_3'
...(省略)...

原因

nativeではない方のqemuのbitbakeは問題なく通る。

Ubuntudbusのバージョンが1.8から1.10に上がったことで、DBusのABIに変更があったことが問題らしい。

dbusのレシピのバージョンを上げる

yocto環境のdbusのレシピを1.8.20から1.10.2に変更することで対応できるらしい。

すでにpatchは考案され、議論が進行中なので、メインラインに取り込まれるのは時間の問題だが、今すぐ試したいというせっかちな人のために一応人柱をやっておく。

この対策について

https://bugzilla.yoctoproject.org/show_bug.cgi?id=8553

ここによると、dbusのバージョンを上げる対策はリジェクトされたらしい。 dbusのバージョンを上げることでエラーを回避できるのはわかっているのだが、 他のディストリビューション環境では破綻すること、リリース前にdbusのバージョンを上げるのはデンジャラスだということが理由らしい。

どの道、このトピックについては有効期限付きのものだと思っていてほしい。

環境

作業環境はjethroのブランチをベースにする。

パッチのダウンロード及び取り込み

念の為、作業用に「dbus-patch-test」というブランチを作成し、下記の要領でパッチを取り込む。

$ cd ~/rpi2/poky
$ wget http://patchwork.openembedded.org/patch/106579/raw -O dbus-upgrade-to-1.10.2.patch
$ git checkout -b dbus-patch-test
$ git apply dbus-upgrade-to-1.10.2.patch

bitbake

エラーが発生していたqemu-nativeをbitbakeしてみる。

$ cd ~/rpi2
$ source poky/oe-init-build-env build
$ bitbake qemu-native

問題なく作成できた。

Build Configuration:
BB_VERSION        = "1.28.0"
BUILD_SYS         = "x86_64-linux"
NATIVELSBSTRING   = "Ubuntu-15.10"
TARGET_SYS        = "arm-poky-linux-gnueabi"
MACHINE           = "raspberrypi2"
DISTRO            = "poky"
DISTRO_VERSION    = "2.0"
TUNE_FEATURES     = "arm armv7a vfp thumb neon callconvention-hard vfpv4 cortexa7"
TARGET_FPU        = "vfp-vfpv4-neon"
meta
meta-yocto
meta-yocto-bsp    = "dbus-patch-test:fc45deac89ef63ca1c44e763c38ced7dfd72cbe1"
meta-raspberrypi  = "master:0776b86c6629b7294ff61e67609f2d4e10e9712c"

NOTE: Preparing RunQueue
NOTE: Executing SetScene Tasks
NOTE: Executing RunQueue Tasks
NOTE: Tasks Summary: Attempted 289 tasks of which 277 didn't need to be rerun and all succeeded.