Эмулировать Raspberry Pi zero W с Qemu не удалось из-за отсутствия dtb - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь эмулировать Raspberry Pi ноль W с Qemu на основе изображения, которое я использовал на реальном Raspberry Pi ноль W.

Я использую команду:

sudo qemu-system-arm \                                                                                                                                                       
-kernel ./qemu-rpi-kernel/kernel-qemu-4.9.59-stretch \
-append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \
-hda pi_zero_kinetic_raspbian.qcow \
-cpu arm1176 -m 512 \
-M versatilepb \
-no-reboot \
-serial stdio \
-net nic -net user \
-net tap,ifname=vnet0,script=no,downscript=no

Но Qemu жалуется, что Error: unrecognized/unsupported machine ID (r1 = 0x00000183)

Так добавили эту опцию:

-dtb linux/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts

Но В этом случае:

qemu-system-arm: Unable to copy device tree in memory
Couldn't open dtb file qemu-rpi-kernel/tools/linux/arch/arm/boot/dts/bcm2835-rpi-zero-w.dts

Поэтому я попытался скомпилировать dts вчтобы получить dtb с:

dtc -O dtb -o bcm2835-rpi-zero-w.dtb bcm2835-rpi-zero-w.dts

Но компиляция не удалась, и я получил:

Error: bcm2835-rpi-zero-w.dts:13.1-9 syntax error
FATAL ERROR: Unable to parse input tree

Я не смог найти ни одного учебника о нуле Пи и весь учебник о первомRapsberry Pi, похоже, устарела.Я не уверен, что компиляция dtb сама по себе - это путь.Любой вклад будет оценен, спасибо!

1 Ответ

0 голосов
/ 25 сентября 2018

Это не сработает, потому что опция QEMU «-M versatilepb» говорит «эмулировать плату разработки VersatilePB», которая не будет запускать ядро, предназначенное для загрузки на Pi Zero.На плате versatilepb нет устройств в тех местах, о которых говорится в файле Pi Zero DTB, поэтому, если вы предоставите ядру Pi Zero DTB, ядро ​​сразу же выйдет из строя, потому что оно не сможет найти то, что ожидает.

В целом, девборды Arm не похожи на x86 - они все разные, и вы не можете просто загрузить ядро, предназначенное для одного, на другое.Это на самом деле то, что говорит вам ошибка «нераспознанный идентификатор машины» - это из гостевого ядра, и оно говорит: «Я не могу загрузиться на этой плате».

Вам нужно либо:

  • используйте -M versatilepb и передайте QEMU ядро ​​и dtb, предназначенные для этой машины, а не какую-то другую
  • используйте какой-нибудь другой параметр -M и ядро ​​и dtb, которые работают с ним (дляНапример, сейчас мы поддерживаем 'raspi2' для модели платы RaspberryPi 2, с некоторыми заметными оговорками, включая «нет USB, нет сети»)

Также, как вы, похоже, обнаружили, -dtb хочет DTBфайл (скомпилированный двоичный файл), а не файл DTS (источник).

...