Armadilloフォーラム

SDブート起動のブートローダー作成

nuka

2021年8月17日 13時12分

アットマークテクノ様
お世話になっております。

以下の記事を参考にSDブート起動の環境変数を予め設定したブートローダーを作成しようとしています。
https://armadillo.atmark-techno.com/blog/615/3404

最新のソース「u-boot-a600-v2018.03-at9.tar.gz」では
「armadillo-640_defconfig」ファイルがありますが、この中に「CONFIG_BOOTARGS」が見当たりません。
そのまま追記すればよろしいでしょうか?定義する場所が変更されたのでしょうか?

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

コメント

at_akihito.irie

2021年8月17日 14時05分

入江です。

参考にして頂いた記事内のu-bootのバージョンが古く、現在のu-bootとは記述
が異なっています。

つきましては、include/configs/armadillo-640.h内の、以下の箇所を修正し
た上で再ビルドしていただくと、SDカード(mmcblk1p2)からブートするu-boot
イメージが作成できます。

#ifdef CONFIG_SYS_BOOT_DEVICE_SELECT
#define MMCDEV "${mmcdev}"
#else
#define MMCDEV "1" <- "0" を "1" に修正
#endif
#define CONFIG_BOOTCOMMAND \

お手数をおかけして申し訳ございません。
以上、よろしくお願いいたします。

入江様
お世話になっております。

回答頂きありがとうございます。
SDブート出来ました。

一応確認なのですが、変更箇所は回答頂いた箇所のみで、
ブログ内で言及されている下記の項目は変更不要で大丈夫でしょうか?
------------------------------------------------------------------
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;"
------------------------------------------------------------------

at_akihito.irie

2021年8月30日 16時17分

入江です。

> 一応確認なのですが、変更箇所は回答頂いた箇所のみで、
> ブログ内で言及されている下記の項目は変更不要で大丈夫でしょうか?
> ------------------------------------------------------------------
> 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;"
> ------------------------------------------------------------------

はい、変更不要で大丈夫です。

ブログ内で言及されている変更箇所は、

mmc 0:2
↓
mmc 1:2

ですが、これはカーネルやdtbの読み出し元が、mmc 0:2ならばmmcblk0p2(eMMC
の第2パーティション)であるという意味です。

つまり、SDブートを行う際は、SDカードの第2パーティション(mmcblk1p2)から
読まなければならないので、mmc 1:2としています。

ですが、最新のu-bootでは当該の箇所が

#define CONFIG_BOOTCOMMAND \
	"run setup_mmcargs; ext4load mmc " MMCDEV ":2 ${loadaddr} /boot/uImage; ext4load mmc " MMCDEV ":2 0x83000000 /boot/${fdt_file}; bootm ${loadaddr} - 0x83000000;"

というように、MMCDEVという変数が使われる形になっています。

そのため、前回の私の回答内の修正を加えていただくだけで、SDカードからブー
トするように設定されるようになっています。

入江様
お世話になっております。
丁寧な回答頂きありがとうございます。

五月雨式で失礼致しますが、質問させてください。

(1)SDカードを抜いた状態で起動し、U-bootの保守モード画面で以下のコマンドを実行しました。
---------------------
U-Boot 2018.03-at8 (Feb 17 2020 - 19:19:11 +0900)

CPU: Freescale i.MX6ULL rev1.1 at 396 MHz
Reset cause: POR
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net: FEC
=> env default bootcmd setup_mmcargs
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
=>
---------------------

(2)自分でSDカード起動の設定をしたU-bootを書き込んだSDカードを挿入して起動しました。
→オートブートモードでSDカードのLinuxが起動しません。
→その後、U-bootの保守モード画面で下記のコマンドを実行したあとは、SDカードのLinuxが起動しました。
---------------------
U-Boot 2018.03-at9 (Aug 30 2021 - 14:08:02 +0900) <----------自分でビルドしたU-boot

CPU: Freescale i.MX6ULL rev1.1 at 396 MHz
Reset cause: POR
I2C: ready
DRAM: 512 MiB
MMC: FSL_SDHC: 0, FSL_SDHC: 1
Loading Environment from MMC... OK
In: serial
Out: serial
Err: serial
PMIC: PFUZE3000 DEV_ID=0x30 REV_ID=0x11
Net: FEC
=> env default bootcmd setup_mmcargs
=> saveenv
Saving Environment to MMC... Writing to MMC(0)... OK
=>
---------------------

環境変数はSDカード起動のもので自動で上書きできないのでしょうか?

at_akihito.irie

2021年9月2日 15時13分

入江です。

> 環境変数はSDカード起動のもので自動で上書きできないのでしょうか?

上書きではありませんが簡単な解決策として、SDブート用のu-bootはeMMCから
環境変数を読まないようにするという手段があります。

u-bootのビルド前に、

[ATDE]$ make ARCH=arm menuconfig

を実行し、以下のconfigを無効にします。

Environment  --->
    [*] Environment in an MMC device <- このチェックを外す

すると、

Environment  --->
    [*] Environment is not stored

が自動的に有効になります。
この状態で、u-bootをビルドし、SDカードに書き込みます。

こうすることで、SDブートでu-boot起動時にeMMC内の環境変数を読みに行かず、
常にinclude/configs/armadillo-640.h内の記述どおりの環境変数で起動します。

入江様
お世話になっております。

> u-bootのビルド前に、
>
>

> [ATDE]$ make ARCH=arm menuconfig
> 

>
> を実行し、以下のconfigを無効にします。
>

u-bootのビルド前に、実行するのは下記で間違いないでしょうか?

 make ARCH=arm armadillo-640_defconfig menuconfig

armadillo-640_defconfigが抜けていたのが気になりました。

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

at_akihito.irie

2021年9月3日 10時55分

入江です。

> u-bootのビルド前に、実行するのは下記で間違いないでしょうか?

以下の順で実行してください。

[ATDE]$ make ARCH=arm armadillo-640_defconfig // Armadillo-640用のコンフィグを設定
[ATDE]$ make ARCH=arm menuconfig
// ここでコンフィグを変更する画面に遷移するので、前の私の投稿のとおりに変更し、saveしてください。
[ATDE]$ make CROSS_COMPILE=arm-linux-gnueabihf-  // ビルド実行
[ATDE]$ ls u-boot.imx
u-boot.imx  // 生成されていることを確認
[ATDE]$ make ARCH=arm armadillo-640_defconfig

[ATDE]$ make ARCH=arm menuconfig

は別なコマンドなので注意してください。