☁️

ADU: チュートリアルのRaspberry Pi OSイメージ Deep Dive

2024/01/14に公開

チュートリアル: Raspberry Pi 3 B+ 参照イメージを使用した Device Update for Azure IoT HubのRaspberry Pi OSイメージ作成を詳しく調べています。

ソースはここ。
https://github.com/Azure/iot-hub-device-update-yocto

ビルドスクリプト

次のコマンドでOSイメージをビルドしています。

./scripts/build.sh -c -t $build_type -v $build_number --adu-src-uri $adu_src_uri --adu-git-branch $adu_git_branch --adu-git-commit $adu_git_commit --do-src-uri $do_src_uri --do-git-branch $do_git_branch  --do-git-commit $do_git_commit --adu-delta-src-uri $adu_delta_src_uri --adu-delta-git-branch $adu_delta_git_branch --adu-delta-git-commit $adu_delta_git_commit -o $build_output_dir

引数はこちら。

./scripts/build.sh内で重要なのはここ。

export MACHINE=raspberrypi3
export TEMPLATECONF=$ROOT_DIR/yocto/config-templates/$MACHINE
source $ROOT_DIR/yocto/poky/oe-init-build-env $BUILD_DIR
bitbake adu-update-image

テンプレートからビルド環境を構築して、bitbake adu-update-imageしていることがわかります。

ビルドの成果物

adu-base-image-raspberrypi3.wic.gzadu-update-image-raspberrypi3.swuの2つ。

  • adu-update-image-raspberrypi3.swu
    OSイメージ。Raspberry Pi Imagerなどを使ってmicroSDに書き込むことができる。
  • adu-update-image-raspberrypi3.swu
    アップデートファイル。SWUpdateのフォーマット。Azure Device Update for IoT Hubで自動配布する用。

adu-update-imageレシピ

ビルドスクリプトでbitbake adu-update-imageしていますが、このadu-update-imageレシピはmeta-raspberrypi-aduに含まれていました。adu-update-image.bbです。
このレシピはswupdateを継承していて、生成したイメージをSWUpdateの形式(.swu)にしているようです。

inherit swupdate

adu-base-imageレシピ

adu-base-image.bbは.wic.gzを生成します。

ここがOSイメージを作成しているようです。

読み込んでいるレイヤー

bblayers.conf.sampleから、読み込んでいるレイヤーはこれです。

最後のmeta-raspberrypi-aduが、Raspberry Pi向けAzure Device Updateのレイヤーのようです。

まとめ

Appendix

各レイヤーのYocto Projectサポート

各レイヤーのサポートレベルはこちら。https://wiki.yoctoproject.org/wiki/Releases から抜粋。

Codename Yocto Project Version Support Level
Nanbield 4.3 7months(2024/5)
Kirkstone 4.0 LTS(-2026/4)
Honister 3.4 EOL

レイヤーのブランチを確認するとKirkstone用のものは用意されているっぽい。

Layer Honister Kirkstone Nanbield
poky Available Available Available
meta-openembedded Available Available Available
meta-raspberrypi Available Available Available
meta-swupdate Available Available Available
meta-iot-hub-device-update-delta Available Available
meta-azure-device-update Available Available
meta-raspberrypi-adu Available Available

ADU client, DO client, ADU deltaのコミット

  • ADU client
    • in build.sh
      • main
      • 33554d29476eab2447234528c8aed186e2b6423d (2022/11/2)
    • example
      • develop
      • e099aaca0ad2b8849de24a13b1aa8e3ddf009251 (2022/12/15)
    • latest release of GitHub
      • 1.1.0
      • 350a551dd9d3f5639eddceb75ef5b10e834865fe (3 weeks ago)
    • default of GitHub
      • develop
      • 45f7f604b26229c70ecad758aa60ec4449eb67c6 (2 weeks ago)
  • DO client
    • in build.sh
      • main
      • b61de2d347c8032562056b18f90ec710e531baf8 (2022/10/29)
    • example
      • main
      • b61de2d347c8032562056b18f90ec710e531baf8 (2022/10/29)
    • latest release of GitHub
      • v1.1.0
      • d71ade6f692dd8bc319ec3228c956517e9b29292 (2023/9/8)
    • default of GitHub
      • develop
      • ae40325c7696d275e26452d6aae61c95997810b4 (3 hours ago)
  • ADU delta
    • in build.sh
      • main
      • 57efe4360f52b297ae54323271c530239fb1d1c7 (2022/9/10)
    • example
      • main
      • b581e92458f458969b427051a2ac5d18d3528dc6 (2022/10/8)
    • latest tag of GitHub
      • 1.0.1
      • dc4a2feb5396b251a978eaa51dd35ed6624fe7fc (2022/10/12)
    • default of GitHub
      • main
      • 77a120d03a8033126b22edd1667820e59bcf3f81 (2023/1/24)

Discussion