Packageの種類
packages-split/
libexample/ <-- ${PN} のファイル
libexample-dev/ <-- ${PN}-dev のファイル
libexample-doc/ <-- ${PN}-doc のファイル
- libexample/:実行ファイルやライブラリ
- libexample-dev/:ヘッダーファイルや開発用シンボリックリンク
- libexample-doc/:ドキュメント関連ファイル
上記より、開発用リンク(xxx.so)はlibexampleに含めることができない
ビルドしたパッケージに含まれるファイルの確認方法
$ oe-pkgdata-util list-pkg-files <パッケージ名>
<パッケージ名>:
ファイル1
ファイル2
なお、do_install内で生成したファイルはFILES変数に含めないと、パッケージにふくまれないのでちゅう
レイヤとレシピの作り方
以下、buildディレクトリ直下で実行
# レイヤを作る
$ bitbake-layers create-layer <レイヤパス>
# BBLAYERS.confに登録する
$ bitbake-layers add-layer <レイヤパス>
# レイヤ一覧を確認
$ bitbake-layers show-layers
# レシピを作る
devtool add <リポジトリURL> -B <branch名>
# レシピの一覧を表示
devtool status
# レシピを削除
devtool reset <レシピ名>
# レシピをレイヤに登録
devtool finish -r <レシピ名> <レイヤパス>
作成したレシピ(Ex:libexample.bb)でデフォルトだとPACKAGESは以下が設定されている。
$ bitbake libexample -e | grep PACKAGES=
PACKAGES="libexample-src libexample-dbg libexample-staticdev libexample-dev libexample-doc libexample-locale libexample"
このままだと、「bitbake libexample」とすると、そんなパッケージはないよと怒られる。
なので、libexample.bbにパッケージを追加
ライセンス情報が知りたい
build/tmp/deploy/licenses内にライセンス情報がある
レシピの依存関係を知りたい
以下を実行すると、build/task-depends.dotファイルができる。これがレシピの依存関係を表している
$ bitbake -g <recipe name>
yoctoレシピ内でシンボリックリンク張る時の注意点
リンク先を相対パスで指定するようにする。
⇒絶対パスだと、ビルド環境に大きく依存する。
NG例)私の環境では/homeはroot権限になってたので、/home/machine-idが作成されず、ビルドエラー発生
ln -s /home/machine-id ${IMAGE_ROOTFS}${sysconfdir}/machine-id
OK例)yoctoのrootfsの/homeに作成
ln -s ../home/machine-id ${IMAGE_ROOTFS}${sysconfdir}/machine-id
レシピ内でmakefileで使う環境変数の定義の仕方
makefile内で使う環境変数をレシピ内で定義するためには、レシピ内に以下を記載してあげればいい
以下例
EXTRA_OEMAKE += "'LDFLAGS=-L/pf/lib'"
ただし、makeコマンドではなくoe_runmakeコマンドでmake実行をしないと反映されないので注意
do_compile() {
make # これNG
oe_runmake # これOK
}
makefile内で${LDFLAGS}と書くと「-L/pf/lib」と置換される
bitbakeで各taskを実行する方法
bitabake <レシピ名> --runall=<タスク>
例
bitbake <レシピ名> --runall=patch
bitbake <レシピ名> --runall=fetch
変数
WORKDIR
build/tmp/work/.../<レシピ名>/<バージョン>/
よくフェッチしたリポジトリにアクセスするため、以下のように定義されることが多い
S = ${WORKDIR}/git
SはBと一緒で、do_install実行時とかの作業ディレクトリとなる
その他/気づき
- bbclass内でdo_install:appendとかの追記が可能
- bbclassを修正後、一度cleanallして実行しないと、キャッシュが利用されるので注意