1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Yocto:レイヤーの追加方法

Last updated at Posted at 2024-03-27

1. はじめに

本ページでは、Yoctoのビルド環境にレイヤーを追加する方法について紹介します。
Yoctoは、様々なレイヤー(meta, meta-poky, meta-yocto-bsp, etc...)を組み合わせて構成されています。レイヤー毎にレシピ(*.bbや*.bbappend)が格納されており、ビルド環境にレイヤーを追加することで、そのレイヤーに含まれるレシピを使うことができるようになります。
多くのレイヤーは、githubなどで公開されています。自身のビルド環境に、使いたいパッケージが含まれていないときは、必要なレイヤーを取得&ビルド環境に追加することで、追加したレイヤーに含まれるパッケージも使えるようになります。また、一般的に、Yocto環境に変更を加える場合、github等で取得したレシピには直接変更を加えず、カスタマイズ用のレイヤーを追加し、そこに変更用のレシピを作成していきます。
この記事は、上記のようなシチュエーションを想定した、レイヤーの追加、作成方法について紹介します。
なお、公式のYoctoマニュアルにおけるレイヤー作成についての説明は、以下から参照することができます。
https://docs.yoctoproject.org/dev/dev-manual/layers.html

2. 既存のビルド環境確認

レイヤー構成に変更を加える前に、まずビルド環境のレイヤー構成がどうなっているか確認してみましょう。
以降は、pokyのzeus-nextブランチのソース環境にて確認しながら説明を行います。独自のビルド環境をお持ちの方は、適宜読み替えお願いします。

まず、ビルド用環境変数設定コマンド(pokyだと"source oe-init-build-env")を実行して、ビルドディレクトリに移動してください。この状態で以下コマンドを実行すると、ビルド環境に登録されているレイヤー一覧を確認することができます。

$ bitbake-layers show-layers
NOTE: Starting bitbake server...
layer                 path                        priority
==============================================================
meta                  /yocto_research/poky/meta  5
meta-poky             /yocto_research/poky/meta-poky  5
meta-yocto-bsp        /yocto_research/poky/meta-yocto-bsp  5

上記より、現在、meta、meta-poky、meta-yocto-bspの3つのレイヤーによって、ビルド環境が構成されていることが確認できます。bitbake実行時も、上記3レイヤーに含まれるレシピが使用される状態になっています。

3. レイヤーの作成方法

本章では、新規にレイヤーを作成する方法や、作成したレイヤーの設定値について紹介していきます。
既存のレイヤーをビルド環境に追加したいと考えている方は、本章は読み飛ばしても構いません。

ビルド用環境変数設定コマンド実行後に、以下のコマンドを実行することで、新規レイヤーを作成することができます。

(相対パスで記述) $ bitbake-layers create-layer ../meta-customize
(絶対パスで記述) $ bitbake-layers create-layer /yocto_research/poky/meta-customize

上記の例では、meta-customizeという名前のレイヤーを作成していますが、任意の名前のレイヤーを作成することが可能です。

また、作成したレイヤーには、以下のファイルが含まれます。

$ tree meta-customize/
meta-customize/
├── COPYING.MIT
├── README
├── conf
│   └── layer.conf
└── recipes-example
    └── example
        └── example_0.1.bb

各ファイルについて簡単に説明します。

ファイル 概要
COPYING.MIT レイヤーのライセンスファイル
変更不要
※Yoctoマニュアルにて、レイヤー作成用スクリプトは、ほとんどのレイヤーで一般的なMITライセンスを想定して作成していると説明あり
README このレイヤーのREADME
変更しなくてもビルドには影響ないが、自身の運用方針等に合わせて記載内容を更新するべき
layer.conf このレイヤーのコンフィグファイル
記載内容の詳細については後述
example_0.1.bb サンプルレシピのため、不要なファイル
ディレクトリごと削除するか、カスタマイズするレシピ向けに変更する必要あり

layer.confの設定値について

layer.confは、このレイヤー全体に影響する設定ファイルのため、各設定値の意味を理解して設定値を決定する必要があります。多くの場合、自動作成されたファイルのままでも動作しますが、最低限、layer.confでどのような設定を行っているのか理解しておきましょう。以下の表で、layer.confで設定している各設定値の意味について説明します。

変数名 初期値 設定内容および変更要否
BBPATH ":${LAYERDIR}" bitbake実行時に参照するパスを示す
初期値から変更不要
BBFILES "${LAYERDIR}/recipes-*/*/*.bb \
\${LAYERDIR}/recipes-*/*/*.bbappend"
bitbake実行時に参照するファイルを示す
基本的に初期値から変更不要
"${LAYERDIR}/recipes-*/*/*.bb"を削除することで、このレイヤーに含まれる*.bbを参照させないようにすることも可能
BBFILE_COLLECTIONS "meta-customize" レイヤー名
他のレイヤーと重複しない名前である必要がある
初期値から変更不要
BBFILE_PATTERN_meta-customize "^${LAYERDIR}/" 特定のレイヤー内のBBFILESのファイルと一致するように展開される変数
初期値から変更不要
BBFILE_PRIORITY_meta-customize "6" レイヤーの優先度
他のレイヤーのレシピと競合した際の動作に影響する
また、*.bbと*.bbappendで影響が若干異なる
*.bb:同じパッケージ名の*.bbが、複数ビルド環境に含まれる場合、最も高い優先度のレイヤーに含まれるものが使用される
*.bbappend:全ての*.bbappendが参照され、*.bbappend間で重複する変数や関数の記述については、優先度が高いレイヤーの記述が優先される
一般的に、カスタマイズ用にレイヤーを追加する場合、既存のレイヤーより高い優先度を設定する
LAYERDEPENDS_meta-customize "core" このレイヤーが依存しているレイヤー情報
例えば、pythonを使うためにmeta-pythonが必要な場合、"core meta-python"となる
特定の版数のレイヤーが必要な場合、LAYERVERSIONを明示的に指定することも可能
指定されたレイヤーがビルド環境に含まれていなかった場合、ビルドエラーする
LAYERSERIES_COMPAT_meta-customize "warrior zeus" 互換性のあるOpenEmbedded-Coreのバージョン
create-layerコマンドでレイヤーを作ったのであれば、ビルド環境に合わせた初期値となるため、変更不要
別のビルド環境に組み込む場合、互換性の確認が必要
LAYERVERSION(任意) 記載なし このレイヤーのバージョンを指定する
LAYERDEPENDSで明示的に版数を指定するときに利用されるパラメータ
任意パラメータのため、特定の目的が無ければ記載不要

4. ビルド環境へのレイヤー登録

以下のコマンドで、ビルド環境にレイヤーを追加できます。

(相対パスで記述) $ bitbake-layers add-layer ../meta-customize
(絶対パスで記述) $ bitbake-layers add-layer /yocto_research/poky/meta-customize

レイヤー追加後にshow-layersコマンドを実行することで、レイヤーが追加できていることを確認できます。

$ bitbake-layers show-layers
NOTE: Starting bitbake server...
layer                 path                        priority
==============================================================
meta                  /yocto_research/poky/meta  5
meta-poky             /yocto_research/poky/meta-poky  5
meta-yocto-bsp        /yocto_research/poky/meta-yocto-bsp  5
meta-customize        /yocto_research/poky/meta-customize  6

上記のレイヤー追加処理は、ビルドディレクトリ内のファイル(build/conf/bblayers.conf)に対して変更が適用されるだけなので、新しくビルドディレクトリを作り直した場合は、変更が引き継がれません。
恒久的な追加をしたい場合、ビルド環境削除後に、"poky/meta-poky/conf/bblayers.conf.sample"に記述を追加します。そうすることで、以降はビルド用環境変数設定コマンドを実行した時点で、meta-customizeがレイヤー一覧に追加されています。

$ cat meta-poky/conf/bblayers.conf.sample
# POKY_BBLAYERS_CONF_VERSION is increased each time build/conf/bblayers.conf
# changes incompatibly
POKY_BBLAYERS_CONF_VERSION = "2"

BBPATH = "${TOPDIR}"
BBFILES ?= ""

BBLAYERS ?= " \
  ##OEROOT##/meta \
  ##OEROOT##/meta-poky \
  ##OEROOT##/meta-yocto-bsp \
+  ##OEROOT##/meta-customize \
  "

5. まとめ

この記事を書くに当たり、普段、あまり深く気にせずに使っていたレイヤー設定について改めて調べました。調べてみると、今まで知らなかった、知っていると役立つ話がいくつもありました。
そんな気づきを含めて記事にまとめたので、ぜひ参考にしてみてください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?