4

fw_setenv ツールが 1 つの環境に対してのみ変数の値を設定するのはなぜですか?

冗長環境 (#define CONFIG_ENV_OFFSET 0xc0000, #define CONFIG_ENV_OFFSET_REDUND 0x100000 ) で uboot を使用しており、Linux から uboot 環境変数の値を設定します。これを行うことができる 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 環境が配置された 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を正しく設定するには?

4

1 に答える 1