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]