自定义 U-Boot 写入环境文件但无法从中读取

问题描述 投票:0回答:1

我正在尝试使用 QEMU 启动虚拟机。我创建了一个名为 disk.img 的原始磁盘映像。它包含两个分区,第一个是 FAT32 可启动分区,第二个是默认的 Linux 分区。我正在尝试使用 QEMU 将此磁盘添加到我的模拟计算机中。这是我使用的命令:

sudo qemu-system-riscv64 -m 2G -nographic -machine virt -smp 8 \
-bios /home/isaiahs/riscv/riscv/opensbi/build/platform/generic/firmware/fw_payload.elf \
-drive file=disk.img,format=raw,id=hd0 \
-device virtio-blk-device,drive=hd0 \

启动机器时,我运行命令“setenv foo bar”,然后运行“saveenv”,然后收到消息:将环境保存到 FAT...好的。当我将 FAT 分区挂载到 /mnt 时,我可以看到 uboot.env 文件已由 uboot 写入磁盘,并且包含 foo=bar。但是,当再次启动模拟计算机时,该计算机不包含环境变量 foo=bar。为什么会这样?

我还从 uboot 收到此消息:“从 FAT 加载环境... ** 错误的设备规范 virtio 0 **”

我使用 make menuconfig 修改了 uboot 以获得以下选项:

制作qemu-riscv64_smode_defconfig

  • 取消设置CONFIG_ENV_IS_NOWHERE
  • CONFIG_ENV_IS_IN_FAT=y
  • CONFIG_ENV_FAT_INTERFACE =“virtio”
  • CONFIG_ENV_FAT_DEVICE_AND_PART="0:1"
  • CONFIG_ENV_FAT_FILE="uboot.env"

当机器启动时,我希望能够执行 printenv foo 并显示 foo=bar 但这并没有发生,即使 foo=bar 是由 uboot 写入磁盘 FAT 分区内的 uboot.env 文件。 Uboot 没有从这个 uboot.env 中读取,我不知道为什么。

我发现我可以使用以下命令在 uboot 命令行中手动从 virtio 磁盘加载环境:

=> printenv foo 
## Error: "foo" not defined 
=> fatload virtio 0:1 ${loadaddr} uboot.env 
131072 bytes read in 3 ms (41.7 MiB/s) 
=> env import -t ${loadaddr} ${filesize} 
=> printenv foo 
foo=bar 
linux embedded-linux qemu riscv u-boot
1个回答
0
投票

我已经解决了这个问题。使用 make menuconfig for u-boot 我将

fatload virtio 0:1 ${loadaddr} uboot.env; env import -t ${loadaddr} ${filesize}
添加到启动选项 -> 启用预启动中的预启动命令中。看起来像是一个黑客解决方案,所以我仍然愿意深入了解为什么它一开始就没有加载而无需执行这些命令。

© www.soinside.com 2019 - 2024. All rights reserved.