4.2.1. 量産用インストールディスクイメージの作成
以下では secureboot.sh setup 及び secureboot.sh build を実行済みである前提です。
量産用インストールディスクイメージの作成には build-rootfs を使用します。
build-rootfs に含まれるファイルの説明は製品マニュアルをご参照ください。
linux カーネルの modules と dtb の入れ替え
はじめに、build-rootfs/a900/packages の linux-at-x2 をコメントアウトします。
[ATDE ~/secureboot_a900]$ code build-rootfs/a900/packages
# linux-at is not available on all arches
# linux-at-x2@atmark
emmc-sref@atmark
# wifi firwmares
linux-firmware-imx-wifi-iw612
# encryped boot
cryptsetup
caam-decrypt
atmark-wwan-utils@atmark
modemmanager@atmark
atmark-power-utils@atmark
power-alertd@atmark
|
コメントアウトします。
|
最新の Linux カーネルイメージと modules を取得するために、./secureboot.sh linux を実行してください。
[ATDE ~/secureboot_a900]$ ./secureboot.sh linux --initrd-type none --linux-update
Logging build outputs to /home/atmark/secureboot_a900/tmp/linux.log
Downloading https://download.atmark-techno.com/armadillo-iot-g4/baseos/linux-at-x2-latest.apk
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 16.1M 100 16.1M 0 0 3971k 0 0:00:04 0:00:04 --:--:-- 3971k
Signing linux image...
Created /home/atmark/secureboot_a900/out/Image.signed 
|
最新の linux apk パッケージがダウンロードされて tmp/linux_apk が作成されます。
|
|
Image.signed が作成されますが、こちらは使用しませんので無視してください。
|
次に、lib/modules と boot/armadillo_900.dtb を build-rootfs/a900/resources にコピーします。
[ATDE ~/secureboot_a900]$ cp -r tmp/linux_apk/lib build-rootfs/a900/resources/
[ATDE ~/secureboot_a900]$ cp tmp/linux_apk/boot/armadillo_900.dtb \
build-rootfs/a900/resources/boot/
SWU イメージのインストール
initial_setup.swu や開発したアプリケーションを含む release.swu など、必要な SWU イメージは build-rootfs/a900/image_installer/installer_swus に配置します。
SWU イメージはファイル名がアルファベット順にインストールされます。
インストールされる順番を保証するため、1_initial_setup.swu、2_release.swu にように名前を変更します。
ここでは、initial_setup.swu は /home/atmark/mkswu に、release.swu は /home/atmark/my_project にあるとします。
[ATDE ~/secureboot_a900]$ mkdir build-rootfs/a900/image_installer/installer_swus
[ATDE ~/secureboot_a900]$ cp /home/atmark/mkswu/initial_setup.swu \
build-rootfs/a900/image_installer/installer_swus/1_initial_setup.swu
[ATDE ~/secureboot_a900]$ cp /home/atmark/my_project/release.swu \
build-rootfs/a900/image_installer/installer_swus/2_release.swu
rootfs のビルド
最新の rootfs を作成するために、以下のコマンドを実行してください。
[ATDE ~/secureboot_a900]$ cd build-rootfs
[ATDE ~/secureboot_a900/build-rootfs]$ ./build_rootfs.sh -b a900
:(省略)
Successfully built /home/atmark/secureboot_a900/build-rootfs/baseos-900-[VERSION].[DATE].tar.zst
インストールディスクイメージ改ざん防止のためのキーペアの生成
作成するインストールディスクイメージの改ざんの防止のために openssl で作成したキーペアを生成します。
[ATDE ~/secureboot_a900/build-rootfs]$ cd ..
[ATDE ~/secureboot_a900]$ 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"
Generating an EC private key
writing new private key to 'verity_key.pem'
署名済み Linux カーネルイメージの作成
暗号化は SoC 内の鍵を使用します。
正規のボード以外で eMMC 内のデータを復号して読み取ることが出来ないようにするために、
暗号化された eMMC 以外起動することができない Linux カーネルイメージに署名して Image.signed-mmc を作成します。
[ATDE ~/secureboot_a900]$ ./secureboot.sh linux --initrd-type mmc
Logging build outputs to /home/atmark/secureboot_a900/tmp/linux.log
Building initrd for mmc (first time is slow)
Signing linux image (mmc)...
Created /home/atmark/secureboot_a900/out/Image.signed-mmc
次に、インストールディスクイメージの改ざん防止用の署名済み Linux カーネルイメージである Image.signed-verity を作成します。
[ATDE ~/secureboot_a900]$ ./secureboot.sh linux \
--initrd-type verity \
--verity /home/atmark/secureboot_a900/verity_cert.pem
Logging build outputs to /home/atmark/secureboot_a900/tmp/linux.log
Building initrd for verity (first time is slow)
Signing linux image (verity)...
Created /home/atmark/secureboot_a900/out/Image.signed-verity
改ざんを防止するために、microSD に Image.signed-verity を書き込み、この Linux カーネルイメージを用いて SD ブートを実行します。
そのために、Image.signed-verity を build-rootfs/a900/image_installer/boot/Image としてコピーします。
[ATDE ~/secureboot_a900]$ mkdir build-rootfs/a900/image_installer/boot
[ATDE ~/secureboot_a900]$ cp out/Image.signed-verity \
build-rootfs/a900/image_installer/boot/Image
署名済みブートローダーの作成
署名済みブートローダーである imx-boot_armadillo-900.signed を作成します。
[ATDE ~/secureboot_a900]$ ./secureboot.sh imxboot
Logging build outputs to /home/atmark/secureboot_a900/tmp/imxboot.log
Building imx-boot (boot loader)...
Created /home/atmark/secureboot_a900/out/imx-boot_armadillo-900.signed
インストールディスクイメージの作成
インストールディスクイメージを作成する前に以下のコマンドを実行して、cryptsetup-bin をインストールします。
cryptsetup-bin はストレージの暗号化に使用します。
[ATDE ~/secureboot_a900]$ sudo apt update && sudo apt upgrade
[ATDE ~/secureboot_a900]$ sudo apt install cryptsetup-bin
eMMC に書き込む rootfs を含むイメージを作成するために以下のコマンドを実行してください。
[ATDE ~/secureboot_a900]$ cd build-rootfs
[ATDE ~/secureboot_a900/build-rootfs]$ ./build_image.sh -b a900
use default(outdir=/home/atmark/secureboot_a900/build-rootfs)
use default(output=baseos-900-[VERSION].[DATE].img)
:(省略)
Successfully built /home/atmark/secureboot_a900/build-rootfs/baseos-900-[VERSION].[DATE].img
次に、インストールディスクイメージを作成します。
作成するインストールディスクイメージを microSD に書き込み、その microSD で SD ブートを実行します。
SD ブートを実行すると、改ざん防止用の署名済み Linux カーネルイメージが起動し、
先ほど作成したイメージと署名済みのブートローダー、署名済みの暗号化に対応した Linux カーネルイメージを eMMC に書き込みます。
以下のコマンドでは、eMMC に書き込まれるそれらのファイルを引数で指定して、インストールディスクイメージを作成します。
[ATDE ~/secureboot_a900/build-rootfs]$ PATH=/sbin:$PATH ./build_image.sh -b a900 \
--srk $(cat /home/atmark/secureboot_a900/tmp/srk_hash.txt) \
--encrypt all \
--boot /home/atmark/secureboot_a900/out/imx-boot_armadillo-900.signed \
--boot-linux /home/atmark/secureboot_a900/out/Image.signed-mmc \
--verity /home/atmark/secureboot_a900/verity_cert.pem \
/home/atmark/secureboot_a900/verity_key.pem \
--installer baseos-900-[VERSION].[DATE].img
use default(outdir=/home/atmark/secureboot_a900/build-rootfs)
use default(output=baseos-900-[VERSION].[DATE]-installer.img)
:(省略)
Successfully built /home/atmark/secureboot_a900/build-rootfs/baseos-900-[VERSION].[DATE]-installer.img
baseos-900-[VERSION].[DATE]-installer.img が microSD に書き込む量産用インストールディスクイメージとなります。
必要であれば、量産用インストールディスクイメージ名を管理しやすい名前に変更してください。
ここでは、installer.img という名前でホームディレクトリにコピーします。
[ATDE ~/secureboot_a900/build-rootfs]$ cp baseos-900-[VERSION].[DATE]-installer.img ~/installer.img
量産用インストールディスクイメージである installer.img を microSD に書き込む方法は「量産用インストールディスクイメージを microSD に書き込む」をご参照ください。