具有冗余环境的U-boot,fw_setenv不会更新这两种环境

时间:2013-08-22 20:55:18

标签: linux-kernel embedded bootloader u-boot

为什么fw_setenv工具只为一个环境设置变量值?

我正在使用带有冗余env的uboot(#define CONFIG_ENV_OFFSET 0xc0000,#define CONFIG_ENV_OFFSET_REDUND 0x100000),我将从linux设置uboot env变量的值。有fw_setenv / fw_printenv工具可以做到这一点:

# fw_printenv rootfs
rootfs=mtd6
# fw_setenv rootfs mtd7

检查它是否已设置:

# fw_printenv rootfs
rootfs=mtd7

似乎没问题,但是在重启系统并进入u-boot控制台后,rootfs变量的值是前者。 uboot读取以前的值:

=> printenv
rootfs=mtd6

然后我查看了uboot envs放置的mtd设备的hexdump输出。

在设置rootfs mtd7:

之前

#hexdump -C / dev / mtd3 |头-n 200

. . . . .
000000a0  65 6c 61 79 3d 35 00 62  61 75 64 72 61 74 65 3d  |elay=5.baudrate=|
000000b0  31 31 35 32 30 30 00 72  6f 6f 74 66 73 3d 6d 74  |115200.rootfs=mt|
000000c0  64 36 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |d6..............|
000000d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

这里rootfs = mtd6,似乎没问题。

#hexdump -C / dev / mtd4 |头-n 200

. . . . . 
00000090  6f 66 66 3b 20 62 6f 6f  74 6d 00 62 6f 6f 74 64  |off; bootm.bootd|
000000a0  65 6c 61 79 3d 35 00 62  61 75 64 72 61 74 65 3d  |elay=5.baudrate=|
000000b0  31 31 35 32 30 30 00 00  00 ff ff ff ff ff ff ff  |115200..........|
000000c0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

在冗余部分的env中没有定义rootfs变量。为什么??

使用fw_setenv rootfs mtd7

之后

#hexdump -C / dev / mtd3 |头-n 200

000000a0  65 6c 61 79 3d 35 00 62  61 75 64 72 61 74 65 3d  |elay=5.baudrate=|
000000b0  31 31 35 32 30 30 00 72  6f 6f 74 66 73 3d 6d 74  |115200.rootfs=mt|
000000c0  64 36 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |d6..............|
000000d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

mtd3上的环境保持不变(rootfs = mtd6)。

#hexdump -C / dev / mtd4 |头-n 200

000000a0  65 6c 61 79 3d 35 00 62  61 75 64 72 61 74 65 3d  |elay=5.baudrate=|
000000b0  31 31 35 32 30 30 00 72  6f 6f 74 66 73 3d 6d 74  |115200.rootfs=mt|
000000c0  64 37 00 00 ff ff ff ff  ff ff ff ff ff ff ff ff  |d7..............|
000000d0  ff ff ff ff ff ff ff ff  ff ff ff ff ff ff ff ff  |................|

新的rootfs变量已在mtd4上编写。

因此uboot环境中的内容不一样。如何从linux正确设置env?

1 个答案:

答案 0 :(得分:2)

我相信您在fw_env.config文件的“设备偏移量”列中可能有错误信息,您可以尝试

/dev/mtd6    0x0c0000       0x10000     0x10000            0x1
/dev/mtd7    0x1c0000       0x10000     0x10000            0x1
#MTDdevname  Device offset  Env. size   Flash sector size  Number of sectors

您平台的最后三列信息可能有所不同。