根据我在/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)和Yacto Fido默认的Variscite开箱即用软件版本:
U-boot版本:u-boot-var-som-am33 2014-+gitrAUTOINC+adf9a14020
U-boot-fw-utils版本:u-boot-fw-utils v2014.07+gitAUTOINC+524123a707-r0-arago0-var
答案 0 :(得分:1)
主要问题是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
实用程序的工作原理是复制“选定”环境,修改已更改的变量,并将其写入“新”环境。然后它交换“选中”和“新”。
因此,如果/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 environment\n");
1235 memcpy(environment.data, default_environment, sizeof default_environment);