Armadilloフォーラム

初期化、開発アプリケーション、セキュアブート用swuを組み込んだイメージファイルの生成方法

tkhrosm

2025年4月11日 8時49分

==========
製品型番:AGX4500-C00D0
Debian/ABOSバージョン:
カーネルバージョン:
3G/LTE モジュール情報 (Debianのみ):
その他:
==========

お世話になっております。

現在、開発機をセキュアブートに対応させ、その開発機と同等の量産機を作成するインストールディスクイメージの生成方法を検討中です。
https://manual.atmark-techno.com/armadillo-x2/armadillo-base-os-securit… の「5.5.セキュアブートおよびルートファイルシステム(rootfs)の暗号化」 でセキュアブートを設定するswuファイルの作製方法は確認できました。
しかし、以降に記述された「5.7. 量産用 Armadillo のセキュアブートおよびストレージ暗号化」のような開発機の複製を作成する方法は避けたいと考えております。理由としては、開発機でのデバッグ時に不要な設定やデータまでもイメージファイルに含めたくないこと、再現性を保つこと等です。

そのため、以下のswuファイルを組み込んだ一つのインストールディスクイメージをATDE上で作成する手順がございましたら、ご教授お願い致します。
1. initial_setup.swu
2. 開発物.swu(私たちが開発した機能・コンテナ等はこちらのswuが対応しています)
3. 1_write_srk_install_kernel.swu
4. 2_secureboot_close.swu
5. 3_disk_encryption.swu

よろしくお願い致します。

コメント

at_satoshi.ohta

2025年4月11日 15時42分

太田です。

現状はまだ abos-ctrl make-installer を使用して Armadillo からイメージを複製する方法しかサポートしてませんが、
以下の手順でセキュアブート用のインストールディスクイメージを1から作成することは可能なはずです。
なにか問題あれば聞いてください。

1. ./secureboot.sh setup と ./secureboot.sh secureboot_init を実行してください。
以降で必要なディレクトリやファイルを生成します。
以降は ./secureboot.sh setup によって作成される secureboot_x2 ディレクトリがカレントディレクトリである前提です。

2. 以下のマニュアルの手順に従って secureboot_x2/build-rootfs/build-rootfs.sh を使用して、必要なファイルとパッケージを含む baseos.tar.zst 作る
https://manual.atmark-techno.com/armadillo-iot-g4/armadillo-iotg-g4_pro…

このとき、initial_setup.swu と 開発物.swu を build-rootfs/ax2/image_installer/installer_swus 下に置いてください。
また、build-rootfs/ax2/packages の linux-at-x2@atmark をコメントアウトしてください。

# linux-at is not available on all arches
 
# linux-at-x2@atmark <-- コメントアウト

代わりに、tmp/linux_apk/lib/modules を build-rootfs/x2/resources/lib にコピーしてください。
tmp/linux_apk が存在しない場合は ./secureboot.sh secureboot_init を実行すると作成されます。

3. SDカードの内容の改ざん防止をする場合は verity を使用するために openssl でキーペアを作成

openssl req -x509 -nodes -days 3650 -newkey ec \
        -pkeyopt ec_paramgen_curve:prime256v1 \
        -keyout verity_key.pem \
        -out verity_cert.pem \
        -subj /CN="secureboot installer"

4. initrd-baseos.mmc.zst(emmc用)と initrd-baseos.verity.zst(SDカード用)を作成

cd build-rootfs
./build_initrd.sh initrd-baseos.mmc.zst --lock --rootfs baseos.tar.zst
./build_initrd.sh initrd-baseos.verity.zst --verity /home/atmark/secureboot_x2/verity_cert.pem

5. Image.signed-mmc と Image.signed-verity を作る

cd ..
./secureboot.sh linux --initrd /home/atmark/secureboot_x2/build-rootfs/initrd-baseos.mmc.zst
./secureboot.sh linux --initrd /home/atmark/secureboot_x2/build-rootfs/initrd-baseos.verity.zst

おそらく Image.signed-mmc と Image.signed-verity は out ディレクトリに作成されるかと思います。

6. out/Image.signed-verity を build-rootfs/ax2/image_installer/boot/Image として置く

7. imx-boot.signed を作成する

./secureboot.sh imxboot

imx-boot_armadillo_ax2.signed も out ディレクトリに作成されるかと思います。

8. インストールディスクイメージを作成する

cd build-rootfs
sudo apt update && sudo apt upgrade
sudo apt cryptsetup-bin
./build_image.sh <-- ここで baseos-x2-[version]-at.[date].img が生成されます
PATH=/sbin:$PATH ./build_image.sh --srk $(cat /home/atmark/secureboot_x2/tmp/srk_hash.txt) --encrypt all \
    --boot /home/atmark/secureboot_x2/out/imx-boot.signed \
    --boot-linux /home/atmark/secureboot_x2/out/Image.signed-mmc \
    --verity /home/atmark/secureboot_x2/verity_cert.pem /home/atmark/secureboot_x2/verity_key.pem \
    --installer baseos-x2-[version]-at.[date].img

どうぞよろしくお願いいたします。

太田さん

ご回答ありがとうございます。
頂いた手順を参考に作業を進めております。

以下の点について確認させてください。

> 8. インストールディスクイメージを作成する
>

> cd build-rootfs
> sudo apt update && sudo apt upgrade
> sudo apt cryptsetup-bin
> ./build_image.sh <-- ここで baseos-x2-[version]-at.[date].img が生成されます
> PATH=/sbin:$PATH ./build_image.sh --srk $(cat /home/atmark/secureboot_x2/tmp/srk_hash.txt) --encrypt all \
>     --boot /home/atmark/secureboot_x2/out/imx-boot.signed \
>     --boot-linux /home/atmark/secureboot_x2/out/Image.signed-mmc \
>     --verity /home/atmark/secureboot_x2/verity_cert.pem /home/atmark/secureboot_x2/verity_key.pem \
>     --installer baseos-x2-[version]-at.[date].img
> 

この手順に含まれる./build_image.shにて `error: /boot/armadillo_iotg_g4.dtb does not exist !!!` とのエラーログが排出されました。secureboot_x2/tmp/armadillo_iotg_g4.dtbを正しい場所に配置する必要があると思いますが、build-rootfs/ax2/resources/bootでよろしいでしょうか?

at_satoshi.ohta

2025年4月14日 14時50分

太田です。

セキュアブートの場合には不必要なチェックなので、./build_image.sh のスクリプト内の

    # add link to dtb
    if [ -n "$dtb" ]; then
        [ -e "mnt/boot/$dtb" ] \
            || error "/boot/$dtb does not exist !!!"
        sudo ln -s "$dtb" mnt/boot/armadillo.dtb \
            || error "Could not add link to dtb"
    fi

の部分をコメントアウトしてください。
こちらのバグは今月修正いたします。
ご報告ありがとうございます。

> 太田さん
>
> ご回答ありがとうございます。
> 頂いた手順を参考に作業を進めております。
>
> 以下の点について確認させてください。
>
> > 8. インストールディスクイメージを作成する
> >

> > cd build-rootfs
> > sudo apt update && sudo apt upgrade
> > sudo apt cryptsetup-bin
> > ./build_image.sh <-- ここで baseos-x2-[version]-at.[date].img が生成されます
> > PATH=/sbin:$PATH ./build_image.sh --srk $(cat /home/atmark/secureboot_x2/tmp/srk_hash.txt) --encrypt all \
> >     --boot /home/atmark/secureboot_x2/out/imx-boot.signed \
> >     --boot-linux /home/atmark/secureboot_x2/out/Image.signed-mmc \
> >     --verity /home/atmark/secureboot_x2/verity_cert.pem /home/atmark/secureboot_x2/verity_key.pem \
> >     --installer baseos-x2-[version]-at.[date].img
> > 

>
> この手順に含まれる./build_image.shにて `error: /boot/armadillo_iotg_g4.dtb does not exist !!!` とのエラーログが排出されました。secureboot_x2/tmp/armadillo_iotg_g4.dtbを正しい場所に配置する必要があると思いますが、build-rootfs/ax2/resources/bootでよろしいでしょうか?

すみません、再実施したところ上記エラーは無くビルドできました。お騒がせしました。(おそらくtmp/linux_apk/lib/modules を build-rootfs/x2/resources/lib にコピーする手順ができていませんでした)

インストールディスクを作成できました。書き込みはまだ行っていないのですが、このイメージファイルを書き込んだ場合はclose処理も含まれますでしょうか?最終的にはclose処理も含めたいのですが、可能であればclose処理をスキップして動作確認をできたらと考えています。

at_satoshi.ohta

2025年4月14日 15時14分

太田です。

> インストールディスクを作成できました。

インストールディスクが作成できて何よりです。

> 書き込みはまだ行っていないのですが、このイメージファイルを書き込んだ場合はclose処理も含まれますでしょうか?

はい。close 処理も行われます。

> 最終的にはclose処理も含めたいのですが、可能であればclose処理をスキップして動作確認をできたらと考えています。

申し訳ありません。この方法でclose処理をスキップする方法はサポートしていません。
細かい修正を行えば出来るとは思いますが、下手に修正してしまうと最悪 Armadillo が起動できない状況になるためです。

どうぞよろしくお願いいたします。

> > 書き込みはまだ行っていないのですが、このイメージファイルを書き込んだ場合はclose処理も含まれますでしょうか?
>
> はい。close 処理も行われます。
>
> > 最終的にはclose処理も含めたいのですが、可能であればclose処理をスキップして動作確認をできたらと考えています。
>
> 申し訳ありません。この方法でclose処理をスキップする方法はサポートしていません。
> 細かい修正を行えば出来るとは思いますが、下手に修正してしまうと最悪 Armadillo が起動できない状況になるためです。
>

ご回答ありがとうございます。本手順ではclose処理はスキップ不可とのことで承知しました。
開発物のswuを組み合わせた際に書き込みプロセスで不備が生じないかを確認したいのですが、そうなるとcloseせずに確認するのは難しいでしょうか。
例えば、開発物のswuではコンテナ、OS、ブートローダーの更新を1つにまとめていてPOST_ACTION=waitとしていますが、その場合SDカードでの書き込み時に問題が起きないか、などを懸念しています。
close処理のスキップが難しいようであれば、動作確認の方法を検討したいと考えています。
以下について知見があれば教えていただけますでしょうか。
1. 開発物swuとセキュアブートを組み込んだインストーラを書き込んだ際にエラーが発生した場合でもclose処理は実施されてしまうか
2. 一度セキュアブート対応インストーラを書き込まれたデバイスに対して、開発swuを変えたインストーラを再度書き込むことはできるか

またもう一点確認したいのですが、今回の手順で作成されたインストールディスクはBTOの依頼で提出するイメージとして問題ないでしょうか。

よろしくお願いいたします。

at_satoshi.ohta

2025年4月15日 14時24分

太田です。

> 1. 開発物swuとセキュアブートを組み込んだインストーラを書き込んだ際にエラーが発生した場合でもclose処理は実施されてしまうか

はい。SRKの書き込みとclose 処理は build-rootfs/common/image_installer/installer.sh で実行しますが、早い段階で行いますのでエラーが発生した場合にも close 処理は実施されると思います。

> 2. 一度セキュアブート対応インストーラを書き込まれたデバイスに対して、開発swuを変えたインストーラを再度書き込むことはできるか

開発swuを変更して、今の手順で再度イントールディスクイメージを生成していただければ、close 処理した後でもそのインストールディスクイメージをSDブートで書き込むことは出来ます。

> またもう一点確認したいのですが、今回の手順で作成されたインストールディスクはBTOの依頼で提出するイメージとして問題ないでしょうか。

問題ないです。

また、1点伝え忘れてましたが、SWU イメージのインストールはアルファベット順で実行されますので、1_initial_setup.swu、2_開発物.swu などのようにファイル名のはじめに数字を入れておけば確実に想定する順番で実行されるので良いかと思います。

どうぞよろしくお願いいたします。