2021年2月3日水曜日

Yocto にレシピとレイヤーを追加する

前回からの続き。

前回作成したイメージに、 “Hello, World!” をコンソールへ表示するシェルスクリプトを追加する。

追加するソースコードは mikoto2000/helloworld.sh

ファイル編集に必要なパッケージをインストール

レシピ等の定義ファイルを編集するのに vim を使うのでインストール。

apt-get install -y vim

レシピ作成

devtool add helloworld https://github.com/mikoto2000/helloworld.sh

レシピ編集

レシピ作成で生成される helloworld_git.bb を編集する。

vim workspace/recipes/helloworld/helloworld_git.bb

helloworld_git.bb

do_configure, do_compile, do_install 内に、それぞれのフェーズで実行するコマンドを列挙する。

今回は、シェルスクリプトを /usr/bin へコピーするだけ。

また、コピー対象ファイルを FILES_${PN} 変数へ列挙する。 FILES_${PN}${D} に展開されたファイルを確認し、不整合があった場合にエラーとなる。

# Recipe created by recipetool
# This is the basis of a recipe and may need further editing in order to be fully functional.
# (Feel free to remove these comments when editing.)

# WARNING: the following LICENSE and LIC_FILES_CHKSUM values are best guesses - it is
# your responsibility to verify that the values are complete and correct.
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=2e01c4af99b331098518b1d669b8a696"

SRC_URI = "git://github.com/mikoto2000/helloworld.sh;protocol=https"

# Modify these as desired
PV = "1.0+git${SRCPV}"
SRCREV = "a078be941b9f55654a1269f6de368fa11e5a7a25"

S = "${WORKDIR}/git"

FILES_${PN} = "${bindir}"

# NOTE: no Makefile found, unable to determine what needs to be done

do_configure () {
    # Specify any needed configure commands here
    :
}

do_compile () {
    # Specify compilation commands here
    :
}

do_install () {
    # Specify install commands here
    :
    install -D -m 755 ./helloworld.sh ${D}/${bindir}/helloworld.sh
}

レシピのビルド

devtool build helloworld

レイヤーを作成し、レシピをレイヤーに追加

bitbake-layers create-layer "$BUILDDIR/meta-helloworld"
bitbake-layers add-layer "$BUILDDIR/meta-helloworld"
devtool finish helloworld meta-helloworld

echo 'CORE_IMAGE_EXTRA_INSTALL += "helloworld"' >> conf/local.conf

レイヤーを追加したイメージをビルド

bitbake core-image-minimal

ビルド成果物を qemu-system-arm で実行

root でログインして helloworld.sh コマンドが実行できることを確認。

qemu-system-arm -M virt -m 1024 \
  -kernel tmp/deploy/images/qemuarm/zImage \
  -drive if=none,file=tmp/deploy/images/qemuarm/core-image-minimal-qemuarm.ext4,format=raw,id=hd \
  -device virtio-blk-device,drive=hd \
  -netdev user,id=usernet \
  -device virtio-net-device,netdev=usernet \
  -append "root=/dev/vda" \
  -nographic -no-reboot

レシピの再修正

以下のような流れになるはず。

devtool modify -n helloworld /work/poky/build/workspace/sources/helloworld

# ファイル修正
...(snip)

# ビルド
devtool build helloworld

# レシピ修正完了
devtool finish helloworld meta-helloworld

以上。

参考資料

0 件のコメント:

コメントを投稿