みつきんのメモ

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

yoctoでkodiをつくる

メディアセンターのディストリビューションをつくってみる。

環境構築

ラズベリーパイ3向けの環境。いつものやつ。

sumo(2.5)をベースにすると後述のCMAのエラーが発生するため、thud(2.6)をベースにする。

ソース取得

$ mkdir -p rpi-kodi/layers
$ cd rpi-kodi/layers
$ git clone git://git.yoctoproject.org/poky.git -b thud
$ git clone git://git.yoctoproject.org/meta-raspberrypi -b thud
$ git clone git://git.openembedded.org/meta-openembedded -b thud

kodiのレイヤをダウンロード

meta-kodiはthudブランチがないため、sumoブランチを使用する。

LAYERSERIES_COMPAT_meta-kodi = "sumo thud"となっているため互換性は問題ない。

$ git clone https://github.com/koenkooi/meta-kodi.git -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-multimedia
$ bitbake-layers add-layer ../layers/meta-openembedded/meta-networking
$ bitbake-layers add-layer ../layers/meta-raspberrypi
$ bitbake-layers add-layer ../layers/meta-kodi

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 = ""

# IMAGE_INSTALL_append = " connman connman-client"

IMAGE_ROOTFS_SIZE = "1782579"

# kodi
IMAGE_INSTALL_appen = " \
            kodi \
            kodi-addon-inputstream-adaptive \
            kodi-addon-pvr-hts \
            libkodiplatform \
"

kodiのconfigureでエラー

下記のエラーが発生してdo_configureで失敗する。

Could NOT find GBM (missing: GBM_LIBRARY GBM_INCLUDE_DIR)

例えば下記のようにlocal.confを修正して、GBMを無効にしてみる。

EXTRA_OECMAKE_append_pn-kodi = " -DENABLE_GBM=OFF"

すると、次のようなメッセージがログに追加される。

| CMake Warning at CMakeLists.txt:111 (message):
|   Your request to disable the dependency GBM required on platform gbm was
|   ignored.  Please choose another platform or add "-DENABLE_GBM=ON" to your
|   CMake command line to resolve this warning.

つまり、GBMを有効化できないなら他のプラットフォームを使えと。

そげな。。。

いろいろ調べると、libgbmはmesaの持ち物らしい。 meta-raspberrypiのプラットフォームでmesaを有効にするにはlocal.confに次の行を記述する。

MACHINE_FEATURES += "vc4graphics"

CMAの確保に失敗する

sumoをベースにkodiを構築した場合、起動してしばらくすると次のエラーが発生しkodiが制御不能になる。

カーネル自体は動作しているので、シリアルコンソールなどでコマンドは実行できる。

[  364.142061] vc4-drm soc:gpu: failed to allocate buffer with size 16777216
[  364.170268] vc4-drm soc:gpu: failed to allocate buffer with size 16777216
[  364.197362] vc4-drm soc:gpu: failed to allocate buffer with size 16777216
[  364.204449] [drm:vc4_bo_create [vc4]] *ERROR* Failed to allocate from CMA:
[  364.211492] [drm]                         kernel:   8100kb BOs (1)
[  364.217836] [drm]                            V3D:  47104kb BOs (85)
[  364.224269] [drm]                     V3D shader:     44kb BOs (11)
[  364.230654] vc4_v3d 3fc00000.v3d: Failed to allocate memory for tile binning: -12. You may need to enable CMA or give it more memory.

CMAのアロケーションに失敗しているが、cat /proc/meminfo | grep -i cmaなどして、CMAFreeのサイズを確認しても、十分にサイズは余っている。

カーネルのバージョンに依存する不具合のようで、thudブランチに切り替えたところ、現時点ではこのエラーは発生していない。