首页 > 解决方案 > 使用 QEMU 安装 ubi 映像时出现问题

问题描述

我正在尝试使用qemu模拟nand flash,并使用它在虚拟机上安装现有的ubifs映像。

我添加了一个nand设备和一个mtd类型的驱动器,得到以下命令:

$ qemu-system-arm -nographic -M virt -m 64 -device nand,chip_id=0x59  -drive if=mtd,format=raw,file=data.ubi -kernel openwrt-armvirt-32-zImage-initramfs 
Warning: Orphaned drive without device: id=mtd0,file=data.ubi,if=mtd,bus=0,unit=0
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.19.56 (buildbot@builds) (gcc version 7.4.0 (OpenWrt GCC 7.4.0 r10348-577174cf60)) #0 SMP Tue Jun 25 14:46:01 2019
[    0.000000] CPU: ARMv7 Processor [412fc0f1] revision 1 (ARMv7), cr=30c5387d
[    0.000000] CPU: div instructions available: patching division code
[    0.000000] CPU: PIPT / VIPT nonaliasing data cache, PIPT instruction cache
[    0.000000] OF: fdt: Machine model: linux,dummy-virt
[    0.000000] Memory policy: Data cache writealloc
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: PSCIv0.2 detected in firmware.
...

我无法访问data.ubi可能是因为以下警告:

“警告:没有设备的孤立驱动器”

如何正确将ubi映像添加到nand设备?

标签: armqemuubifs

解决方案


您必须通过参数链接-driveand :-deviceid

qemu-system-arm \
  `: [...]` \
  -device nand,chip_id=0x59,id=myubiflash \
  -drive if=mtd,format=raw,file=data.ubi,id=myubiflash \
  `: [...]`

如果您真的仔细阅读了该消息,您会注意到驱动器 ID 默认为mtd0

警告:没有设备的孤立驱动器:id=mtd0 ,file=data.ubi,if=mtd,bus=0,unit=0

当然 qemu 不能神奇地猜出你的意思是-device nand为驱动器定义 。

错误消息就在此处。


编辑

我承认,我对 QEMU 命令行中的语法层也没有完全理解。此外,QEMU 文档也不是最容易阅读的;但是它有这段话:

使用 -blockdev 创建的块驱动程序节点可用于来宾设备,方法是在定义块设备的 -device 参数中为驱动器属性指定其节点名称。

-blockdev-drive在这种情况下是同义词。

如果我能正确解释的话,这个的意思是,而不是

  • -device […],id=foo,-drive […],id=foo

你应该使用

  • -device […],drive=foo,-drive […],id=foo

无法测试此 ATM,但其中任何一个都应该适合您。


推荐阅读