使用 QEMU 挂载 ubi 镜像时出现问题
Problems mounting a ubi image using QEMU
我正在尝试使用 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 可能是因为以下警告:
"Warning: Orphaned drive without device"
如何将 ubi 图像正确添加到 nand 设备?
您必须通过 id
参数 link -drive
和 -device
:
qemu-system-arm \
`: [...]` \
-device nand,chip_id=0x59,id=myubiflash \
-drive if=mtd,format=raw,file=data.ubi,id=myubiflash \
`: [...]`
如果您真的仔细阅读了消息,您会注意到驱动器 ID 默认为 mtd0
:
Warning: Orphaned drive without device: id=mtd0,file=data.ubi,if=mtd,bus=0,unit=0
当然 qemu 不能神奇地猜到你打算为驱动器定义 -device nand
。
错误信息就在这里。
编辑
我承认,我也没有完全理解 QEMU 命令行中的语法层。
此外,QEMU doc 不是最容易阅读的;但是它有这段话:
A block driver node created with -blockdev can be used for a guest device by specifying its node name for the drive property in a -device argument that defines a block device.
-blockdev
在这种情况下是 -drive
的同义词。
如果我没看错的话,这个的意思是,而不是
-device […],id=foo
, -drive […],id=foo
你应该使用
-device […],drive=foo
, -drive […],id=foo
无法测试此 ATM,但其中任何一个都应该适合您。
我正在尝试使用 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 可能是因为以下警告:
"Warning: Orphaned drive without device"
如何将 ubi 图像正确添加到 nand 设备?
您必须通过 id
参数 link -drive
和 -device
:
qemu-system-arm \
`: [...]` \
-device nand,chip_id=0x59,id=myubiflash \
-drive if=mtd,format=raw,file=data.ubi,id=myubiflash \
`: [...]`
如果您真的仔细阅读了消息,您会注意到驱动器 ID 默认为 mtd0
:
Warning: Orphaned drive without device: id=mtd0,file=data.ubi,if=mtd,bus=0,unit=0
当然 qemu 不能神奇地猜到你打算为驱动器定义 -device nand
。
错误信息就在这里。
编辑
我承认,我也没有完全理解 QEMU 命令行中的语法层。 此外,QEMU doc 不是最容易阅读的;但是它有这段话:
A block driver node created with -blockdev can be used for a guest device by specifying its node name for the drive property in a -device argument that defines a block device.
-blockdev
在这种情况下是 -drive
的同义词。
如果我没看错的话,这个的意思是,而不是
-device […],id=foo
,-drive […],id=foo
你应该使用
-device […],drive=foo
,-drive […],id=foo
无法测试此 ATM,但其中任何一个都应该适合您。