根据我在/etc/fw_env.config
中尝试的一些配置,例如一个或两个条目,我在尝试读取U-boot环境变量时得到以下错误:
root@varsomam33:~# fw_printenv serverip
Warning: Bad CRC, using default environment
或
root@varsomam33:~# fw_printenv serverip
Cannot read bad block mark: Invalid argument
根据本教程(https://developer.ridgerun.com/wiki/index.php/Setting_up_fw_printenv_to_modify_u-boot_environment_variables),我构建了我的/etc/fw_env.config
看起来像这样:
# MTD device name Device offset Env. size Flash sector size Number of sectors
/dev/mtd6 0x1C0000 0x20000 0x20000 1
/dev/mtd7 0x1E0000 0x20000 0x20000 1
仅供参考,我使用TI Omap ARM芯片(var-som-am33)和Yocto Fido默认从Variscite开箱即用,这些软件版本:
U-boot version:
u-boot-var-som-am33 2014-+gitrAUTOINC+adf9a14020
U-boot-fw-utils version:
u-boot-fw-utils v2014.07+gitAUTOINC+524123a707-r0-arago0-var
主要问题是"设备偏移"在RidgeRun教程中描述不正确。它不是NAND闪存中的绝对偏移量,而是来自分区的偏移量,在我的情况下应该是"0x0"。
这是我的工作/etc/fw_env.config
root@varsomam33:~# cat /etc/fw_env.config
# MTD device name Device offset Env. size Flash sector size Number of sectors
/dev/mtd6 0x0 0x20000 0x20000 1
/dev/mtd7 0x0 0x20000 0x20000 1
此外,当没有在/etc/fw_env.config
文件中描述的U-boot备份(冗余)环境时,我得到的CRC错误被抛出。fw_printenv
实用程序的工作方式是复制"选定的"环境,修改已更改的变量,并将其写入"新"环境。然后将"selected"one_answers"new"交换。
因此,如果在/etc/fw_env.config
中只有一个环境,它将使用"选定"环境的默认值。
代码tools/env/fw_env.c
1230 crc0_ok = (crc0 == *environment.crc);
1231 if (!HaveRedundEnv) {
1232 if (!crc0_ok) {
1233 fprintf (stderr,
1234 "Warning: Bad CRC, using default environmentn");
1235 memcpy(environment.data, default_environment, sizeof default_environment);