1

根据我尝试的一些配置,/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)和 Variscite 的 Yocto Fido 默认开箱即用,具有以下软件版本:

  • 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

4

1 回答 1

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

此外,当文件中没有描述 U-boot 备份(冗余)环境时,会引发我遇到的 CRC 错误/etc/fw_env.config。该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);
于 2016-09-07T18:58:15.823 回答