ブログ

Armadillo-640:SDブート用の環境変数を設定済みのSDブートディスクの作成方法

at_kazutaka.bito
2018年7月30日 13時48分

Armadillo-640 製品マニュアル
12.4. SDブートの実行
では、一度、SDブートディスクを起動して、

=> setenv bootcmd ext4load mmc 1:2 \${loadaddr} /boot/uImage\; ext4load mmc 1:2 0x83000000 /boot/a640.dtb\; bootm \${loadaddr} - 0x83000000\;
=> setenv bootargs root=/dev/mmcblk1p2 rootwait
=> saveenv

のようにコンソールからSDブート用の環境変数を設定しています。
(saveenvをすることにより、次回起動以降は上記の設定は不要になります。)

上記のSDブート用の環境変数の設定は、予めブートローダーに設定しておくことも可能です。

ここでは、SDブート用の環境変数を予めブートローダーに設定しておくことで、
初回起動時のコンソールからの環境変数の設定を省くことができるSDブートディスクを作成します。

以下、
 ブートローダーソースファイル:u-boot-a600-v2018.03-at1.tar.gz
の場合で説明します。
(ソースファイルのバージョンが違う場合は、ファイル名を読み替える必要があります。)

1.SDブートの変更

ブートローダーソースファイルを解凍します。

atmark@atde7:~$ tar xf u-boot-a600-v2018.03-at1.tar.gz

gedit等のエディタで、armadillo-640.hとarmadillo-640_defconfigを下記のように変更します。

u-boot-a600-v2018.03-at1/include/configs/armadillo-640.h

#define CONFIG_BOOTCOMMAND \
    "ext4load mmc 0:2 ${loadaddr} /boot/uImage; ext4load mmc 0:2 0x83000000 /boot/a640.dtb; bootm ${loadaddr} - 0x83000000;"

の箇所を下記のように変更します。

#define CONFIG_BOOTCOMMAND \
    "ext4load mmc 1:2 ${loadaddr} /boot/uImage; ext4load mmc 1:2 0x83000000 /boot/a640.dtb; bootm ${loadaddr} - 0x83000000;"

u-boot-a600-v2018.03-at1/configs/armadillo-640_defconfig

CONFIG_BOOTARGS="root=/dev/mmcblk0p2 rootwait"

の箇所を下記のように変更します。

CONFIG_BOOTARGS="root=/dev/mmcblk1p2 rootwait"

ブートローダーをビルドします。

atmark@atde7:~/u-boot-a600-v2018.03-at1$ make ARCH=arm armadillo-640_defconfig
atmark@atde7:~/u-boot-a600-v2018.03-at1$ make CROSS_COMPILE=arm-linux-gnueabihf-

上記ビルドで生成された
u-boot-a600-v2018.03-at1/u-boot.imx
を下記のSDブートディスクのブートローダーとして使用します。

2.SDブートディスクの作成

Armadillo-640 製品マニュアル
12.1.1. 手順:ブートディスクの作成例
の手順で、SDカードに2つのプライマリパーティションを作成します。

この手順の最後でSDカードにブートローダーを書き込んでいますが、ここで書き込むブートローダーのファイル名は、
上記でビルドしたu-boot.imxです。

atmark@atde7:~/u-boot-a600-v2018.03-at1$ sudo dd if=u-boot.imx of=/dev/sdb bs=1k seek=1 conv=fsync

ルートファイルシステム、カーネルイメージ、DTBは、
Armadillo-640 製品マニュアル
12.2. ルートファイルシステムの構築
12.3. LinuxカーネルイメージとDTBの配置 の手順で、SDカードに書き込みます。

3.動作確認

上記までの手順で作成したSDカードをArmadillo-640に挿入して、JP1とJP2の両方共ショートの状態で起動すると、
初回起動時でも、
Armadillo-640 製品マニュアル
12.4. SDブートの実行
内の

=> setenv bootcmd ext4load mmc 1:2 \${loadaddr} /boot/uImage\; ext4load mmc 1:2 0x83000000 /boot/a640.dtb\; bootm \${loadaddr} - 0x83000000\;
=> setenv bootargs root=/dev/mmcblk1p2 rootwait
=> saveenv

の設定不要で、SDブートディスクで起動します。