var-som-am33上的fw_printenv fw_setenv失败了

时间:2016-09-07 18:58:16

标签: embedded-linux yocto u-boot omap

根据我在/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

1 个答案:

答案 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);