通过 dd 命令更新 u-boot.imx , emmc 中环境变量被清空,此时使用 fw_printenv 命令查询到的为 在 uboot 中编译 fw_printenv 命令时代码中设置的环境变量,而不是更新的 u-boot.imx 中的环境变量 。
root@imx6ulevk:/userdata# cat update.sh
#!/bin/shdd if=/dev/zero of=/dev/mmcblk1 bs=1k seek=768 conv=fsync count=8
echo 0 > /sys/block/mmcblk1boot0/force_ro
dd if=u-boot.imx of=/dev/mmcblk1boot0 bs=512 seek=2
echo 1 > /sys/block/mmcblk1boot0/force_ro
root@imx6ulevk:/userdata#
root@imx6ulevk:/userdata# ./update.sh
8+0 records in
8+0 records out
854+0 records in
854+0 records outroot@imx6ulevk:/userdata#
root@imx6ulevk:/userdata#root@imx6ulevk:/userdata# fw_printenv
Warning: Bad CRC, using default environment
bootcmd=mmc dev ${mmcdev};mmc dev ${mmcdev}; if mmc rescan; then if run loadbootscript; then run bootscript; else if run loadimage; then run mmcboot; else run netboot; fi; fi; else run netboot; fi
bootdelay=0
baudrate=115200
ethprime=FEC
loadaddr=0x80800000
mfgtool_args=setenv bootargs console=${console},${baudrate} rdinit=/linuxrc g_mass_storage.stall=0 g_mass_storage.removable=1 g_mass_storage.file=/fat g_mass_storage.ro=1 g_mass_storage.idVendor=0x066F g_mass_storage.idProduct=0x37FF g_mass_storage.iSerialNumber="" clk_ignore_unused
initrd_addr=0x83800000
initrd_high=0xffffffff
bootcmd_mfg=run mfgtool_args;bootz ${loadaddr} ${initrd_addr} ${fdt_addr};
panel=TFT43AB
script=boot.scr
image=zImage
console=ttymxc0
fdt_high=0xffffffff
initrd_high=0xffffffff
initrd_file=initrd
........................................
应当在更新 u-boot.imx 后重启进入uboot命令行,执行 saveenv 将环境变量保存到 emmc 后再执行 fw_printenv 。
Environment size: 2982/8188 bytes
=>
=> saveenv
Saving Environment to MMC...
mmc_get_env_addr 0
offset c0000 CONFIG_ENV_SIZE 2000
Writing to MMC(1)... done
=>
注意: fw_env.config 中 地址 与 大小 与 emmc 中存储的位置一致。
root@imx6ulevk:/# cat /etc/fw_env.config
# emmc example
/dev/mmcblk1 0xc0000 0x2000
root@imx6ulevk:/#