使用QEMU挂载ubi映像时出现问题

时间:2019-07-01 17:58:33

标签: arm qemu ubifs

我正在尝试使用 qemu 模拟 nand 闪存,并使用该闪存在虚拟机上安装现有的 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 设备?

1 个答案:

答案 0 :(得分:1)

您必须通过-drive参数链接-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 doc并不是最容易阅读的;但是它有这段话:

  

通过-blockdev创建的块驱动程序节点可以通过在定义块设备的-device参数中为drive属性指定其节点名称来用于客户机设备。

在这种情况下,

-blockdev-drive的同义词。

如果我能正确解释的话,它的意思是代替

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

您应该使用

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

无法测试此ATM,但是其中任何一个都可以使其正常工作。