Проблемы при монтировании образа ubi с использованием QEMU - PullRequest
1 голос
/ 01 июля 2019

Я пытаюсь эмулировать флешку nand с qemu и использую ее для монтирования существующего образа 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 Ответ

1 голос
/ 02 июля 2019

Вам необходимо связать -drive и -device с помощью параметра id:

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

Если вы действительно внимательно прочитаете сообщение, вы заметите, чтоИдентификатор диска по умолчанию равен mtd0:

Внимание: диск-сирота без устройства: id = mtd0 , file = data.ubi, if = mtd, bus = 0, unit= 0

И, конечно, qemu не может волшебным образом догадаться, что вы намеревались определить -device nand для привода.

Сообщение об ошибке здесь точно на месте.


Edit

Я признаю, что с моей стороны также нет идеального понимания уровней синтаксиса в командной строке QEMU.Кроме того, QEMU doc не самый легкий для чтения;однако он имеет следующий отрывок:

Узел драйвера блока, созданный с помощью -blockdev, можно использовать для гостевого устройства, указав его имя узла для свойства диска в аргументе -device, который определяет блочное устройство.

-blockdev является синонимом -drive в этом контексте.

Если я могу правильно это интерпретировать, смысл этого в том, что вместо

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

вы должны использовать

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

Можетне тестируйте этот банкомат, но любой из них должен заставить его работать на вас.

...