ブログ

Linux動作中に(SPIフラッシュに書かれた)U-Bootのパラメータを確認、変更する方法

at_ito
2018年6月26日 16時01分

U-Bootのパラメータは、保守モードで起動した後にprintenvや、setenv等のコマンドで確認できますが、標準の状態ではLinuxが起動している状態でU-Bootのパラメータを確認、変更できません。そのため、ここでは新しくパッケージを入れることで、Linux上でU-Bootのパラメータを確認、変更する方法を紹介します。

1. 環境の確認

このブログでは以下の環境で確認を行っています。環境が異なる場合は、一部設定の変更が必要になる場合がありますので、適宜読み替えてください。

  • 製品: Armadillo-IoT G3
  • U-Bootの配置場所: SPIフラッシュ(/dev/mtd0)
  • U-Bootのバージョン: U-Boot 2016.07-at15

2. u-boot-toolsパッケージのインストール

U-Bootのパラメータを確認、変更するためのコマンド(fw_printenv, fw_setenv)が含まれるu-boot-toolsパッケージをインストールします。

以下のコマンドを実行してパッケージをインストールしてください。

[armadillo ~]# apt-get install u-boot-tools

3. u-boot-toolsの設定

u-boot-toolsは/etc/fw_env.configでパラメータがどこに配置されているかを設定する必要があります。

Armadilloでは、/etc/fw_env.configを以下のように設定してください。

# Configuration file for fw_(printenv/saveenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
#
# XXX this configuration might miss a fifth parameter for the "Number of
# sectors"
 
# MTD device name   Device offset   Env. size   Flash sector size
/dev/mtd0           0xe0000         0x2000      0x10000

※: 上記設定ファイルは、Deivce offsetはU-BootソースコードのCONFIG_ENV_OFFSET、Env. sizeはU-BootソースコードのCONFIG_ENV_SIZE、Flash sector sizeは"cat /proc/mtd"の出力結果から設定しています。

4. パラメータの確認

Linux上で以下のように、fw_printenvを実行することでSPIフラッシュに設定されているU-Bootパラメータが確認できます。

[armadillo ~]# fw_printenv
baudrate=115200
boot_fdt=try
bootcmd=mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else setenv mmcpart 3; if run loadbootscript; then run bootscript; fi; setenv mmcpart 1; if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
bootscript=echo Running bootscript from mmc ...; source
console=ttymxc4
ethact=FEC0
ethaddr=00:11:0c:00:05:fe
ethprime=FEC
fdt_addr=0x84800000
fdt_file=armadillo_iotg_g3.dtb
fdt_high=0xffffffff
initrd_addr=0x85000000
initrd_high=0xffffffff
ip_dyn=yes
loadaddr=0x82000000
loadbootscript=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${script};
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loadimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${image}
loadm4image=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${m4image}
m4boot=sf probe 0:0; bootaux 0x60000000
m4image=m4_qspi.bin
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
mmcargs=setenv bootargs console=${console},${baudrate} root=${mmcroot} ${optargs}
mmcautodetect=yes
mmcboot=echo Booting from mmc ...; run mmcargs; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if run loadfdt; then bootm ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootm; else echo WARN: Cannot load the DT; fi; fi; else bootm; fi;
mmcdev=1
mmcpart=1
mmcroot=/dev/mmcblk2p2 rootwait rw
netargs=setenv bootargs console=${console},${baudrate} root=${mmcroot} ${optargs} ip=dhcp
netboot=echo Booting from net ...; run netargs; if test ${ip_dyn} = yes; then setenv get_cmd dhcp; else setenv get_cmd tftp; fi; ${get_cmd} ${image}; if test ${boot_fdt} = yes || test ${boot_fdt} = try; then if ${get_cmd} ${fdt_addr} ${fdt_file}; then bootm ${loadaddr} - ${fdt_addr}; else if test ${boot_fdt} = try; then bootm; else echo WARN: Cannot load the DT; fi; fi; else bootm; fi;
revision#=0x0001
script=boot.scr
serial#=41
stderr=serial
stdin=serial
stdout=serial
update_m4_from_sd=if sf probe 0:0; then if run loadm4image; then setexpr fw_sz ${filesize} + 0xffff; setexpr fw_sz ${fw_sz} / 0x10000; setexpr fw_sz ${fw_sz} * 0x10000; sf erase 0x0 ${fw_sz}; sf write ${loadaddr} 0x0 ${filesize}; fi; fi
image=uImage

5. パラメータの設定

以下のようにfw_setenvコマンドを実行することで、U-Bootのパラメータを変更することができます。

[armadillo ~]# fw_setenv [variable name] [variable value]