【问题标题】:U-boot with redundant environment, fw_setenv does not update both environments具有冗余环境的 U-boot,fw_setenv 不会更新两个环境
【发布时间】:2013-08-25 18:51:37
【问题描述】:

为什么 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?

【问题讨论】:

  • 这将有助于我们查看您正在使用的信息,例如在 fw_env.config 文件中。也许描述 /dev/mtd3 的行不正确,那会按照您的描述进行。在我看来,它需要在偏移字段中使用类似 CONFIG_ENV_OFFSET+CONFIG_ENV_OFFSET_REDUND 的东西。另外,例如如果您在标准平台上,也许让我们知道板子和 u-boot 基线版本。

标签: linux-kernel embedded bootloader u-boot


【解决方案1】:

我相信你可能在 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

最后三列的信息可能因您的平台而异。

【讨论】:

    猜你喜欢
    • 2020-06-26
    • 2020-02-20
    • 2021-10-19
    • 2011-06-02
    • 1970-01-01
    • 2016-08-27
    • 2011-06-28
    • 2016-09-05
    • 2019-12-26
    相关资源
    最近更新 更多