みつきんのメモ

組み込みエンジニアです。Interface誌で「My オリジナルLinuxの作り方」連載中

Yocto Project HONISTERの注意点

はじめに

最近やっと時間が取れるようになって(なってない)、HONISTERをいじり始めた。

初っ端から下記のようなエラーが発生して面食らった。

ERROR: Variable DISTRO_FEATURES_append contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake.

Upgrading to Yocto Honisterで、まず引っかかりそうなポイントをまとめてくれている。

大きい変更点

まずは、migration-guidesを見る。

Override syntax changes

一番大きい変更点は、Override syntax changesだろう。

下記のような記述が、

SRC_URI_qemux86 = "file://somefile"

このように変更されている。

SRC_URI:qemux86 = "file://somefile"

Override syntax(ここではqemux86)と変数名の区切りが_から:に変更されている。この変更自体は、変数名に入っている単語を区切るための_とOverride syntaxのための_でよく混乱していたので、歓迎されるべきものだと思っているが、 使用頻度が高いところでもあるので、ユーザーがよく引っかかると思う。

その他のものも含めて、migration-guideではこのように例示されている。

変更前

SRC_URI_append = " file://somefile"
SRC_URI_append_qemux86 = " file://somefile2"
SRC_URI_remove_qemux86-64 = " file://somefile3"
SRC_URI_prepend_qemuarm = "file://somefile4 "
FILES_${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD_tar = "tar"
BASE_LIB_tune-cortexa76 = "lib"
SRCREV_pn-bash = "abc"
BB_TASK_NICE_LEVEL_task-testimage = '0'

変更後

SRC_URI:append = " file://somefile"
SRC_URI:append:qemux86 = " file://somefile2"
SRC_URI:remove:qemux86-64 = " file://somefile3"
SRC_URI:prepend:qemuarm = "file://somefile4 "
FILES:${PN}-ptest = "${bindir}/xyz"
IMAGE_CMD:tar = "tar"
BASE_LIB:tune-cortexa76 = "lib"
SRCREV:pn-bash = "abc"
BB_TASK_NICE_LEVEL:task-testimage = '0'

変更後のほうが明らかにわかりやすくなっている。

ほかにもgetVar("RDEPENDS_${PN}")getVar("RDEPENDS:${PN}").になったりする。

とにかく、下記のようなメッセージに出くわしたら_:に変えられないか疑ってみよう。

ERROR: Variable XXXXXXX contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake.

host dependencyの追加

bitbakeを実行する際にHost側にインストールしておくべきパッケージが追加されている。

  • lz4c
  • pzstd
  • zstd

以前からYocto Projectを使っている環境で不意にエラーになるとびっくりするかもしれない。

Virtual runtime providesの廃止

virtual/がRPROVIDESやRDEPENDSで使用できなくなった。あまりユースケースが思い浮かばないが、過去の資産のレイヤを使い回す時に出くわすかもしれない。

Tuneファイルがアーキテクチャ毎のディレクトリに移動

BSP用のレイヤを作ったりする場合に出くわす可能性がある。tune-corei7.incとかtune-cortexa8.incなどのファイルのこと。

これらがアーキテクチャごとにx86系であればx86MIPS系であればmips、ARM系の場合はarmv8aarmv8mなどのサブディレクトリごとに配置されるようになった。

まとめ

Override syntaxが変更したのはかなり大きい。過去のバージョンからHONISTERに移行する場合は注意が必要となる。

詳細かつ正確な情報はmigration-guidesを参照してほしい。

参考