Yur*_*uri 6 embedded linux-kernel bootloader u-boot
为什么fw_setenv工具只为一种环境设置变量值?
我正在使用带有冗余环境的uboot(#define CONFIG_ENV_OFFSET 0xc0000、#define CONFIG_ENV_OFFSET_REDUND 0x100000),并且我将从linux设置uboot环境变量的值。有 fw_setenv/fw_printenv 工具可以执行此操作:
# fw_printenv rootfs
rootfs=mtd6
# fw_setenv rootfs mtd7
Run Code Online (Sandbox Code Playgroud)
检查它是否确实已设置:
# fw_printenv rootfs
rootfs=mtd7
Run Code Online (Sandbox Code Playgroud)
看起来没问题,但是重启系统并进入u-boot控制台后,rootfs变量的值是以前的值。uboot读取以前的值:
=> printenv
rootfs=mtd6
Run Code Online (Sandbox Code Playgroud)
然后我查看了 uboot env 放置的 mtd 设备的 hexdump 输出。
# 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 |................|
Run Code Online (Sandbox Code Playgroud)
这里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 |................|
Run Code Online (Sandbox Code Playgroud)
env 中的冗余部分没有定义 rootfs 变量。为什么??
# 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 |................|
Run Code Online (Sandbox Code Playgroud)
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 |................|
Run Code Online (Sandbox Code Playgroud)
新的 rootfs 变量已写入 mtd4 上。
所以uboot环境中的内容是不一样的。如何在linux下正确设置env?
小智 4
我相信您在 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
Run Code Online (Sandbox Code Playgroud)
最后三列的信息可能与您的平台不同。
| 归档时间: |
|
| 查看次数: |
5631 次 |
| 最近记录: |