Как эмулировать Raspberry Pi 2 на QEMU?
некоторое время назад я подражал Raspberry Pi следующий в этой статье, но этот подход имеет несколько проблем:
- Это очень медленно.
- разрешение дисплея ограничено до 800x600.
- вы не можете эмулировать более 256 МБ оперативной памяти.
кроме того, нет эмуляции для нового Broadcom BCM2836 или любого другого процессора на базе arm7 в в QEMU. Однако, есть несколько причин, почему это было бы интересно подражать Raspberry Pi. Поэтому меня интересуют любые подсказки, которые подталкивают меня в правильном направлении, чтобы получить рабочую эмуляцию Raspberry Pi 2 с помощью Qemu или любого другого программного обеспечения эмуляции под Linux.
3 ответов
Если вам удобно строить qemu, вы можете найти поддержку эмуляции системы pi2 здесь:https://github.com/0xabu/qemu. Это не особенно быстро, и эмуляции устройства являются неполными, но вы можете изменить размер ОЗУ и фреймбуффера.
есть краткие инструкции по загрузке Raspbian в конце https://github.com/0xabu/qemu/wiki
Если вы хотите запустить Raspberry Pi 2 build bot или что-то подобное, вы должны взглянуть на running Qemu в пользовательском / статическом режиме. Я пробовал это с помощью Linux на виртуальной машине, это довольно быстро по сравнению с эмуляцией системы Qemu. К сожалению, он только эмулирует процессор, поэтому вы не сможете тестировать игры или Wayland/Weston.
Я смог построить ядро для моего Pi 2 примерно за час, используя этот метод.
Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2016-05-27, ядро ванили
-
скомпилировать QEMU 2.9.0 из источника:
sudo apt-get build-dep qemu-system-arm git clone --recursive git://git.qemu-project.org/qemu.git cd qemu git checkout v2.9.0 ./configure make `nproc`
-
загрузите изображение и извлеките из него ядро и dts:
-
загрузите изображение и распакуйте его:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip unzip 2016-05-27-raspbian-jessie.zip
-
установите второе изображение раздела. Простой способ есть:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
это работает только с последней
losetup
на Ubuntu 16.04, другие методы по адресу: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576это печатает устройство цикла, например:
/dev/loop0
так что мы делаем:
sudo mkdir /mnt/rpi sudo mount /dev/loop0p1 /mnt/rpi cp /mnt/rpi/kernel7.img bcm2709-rpi-2-b.dtb . sudo umount /mnt/rpi sudo losetup -d /dev/loop0
-
-
Run:
./arm-softmmu/qemu-system-arm \ -M raspi2 \ -append "rw earlyprintk loglevel=8 console=ttyAMA0,115200 dwc_otg.lpm_enable=0 root=/dev/mmcblk0p2" \ -cpu arm1176 \ -dtb bcm2709-rpi-2-b.dtb \ -sd 2016-05-27-raspbian-jessie.img \ -kernel kernel7.img \ -m 1G \ -smp 4 \ -serial stdio \ ;
вы можете войти в систему на терминале, который показывает на вашем главный терминал.
ограничения:
-
-M raspi2
был добавлен в QEMU 2.6.0, а Ubuntu 16.04 имеет только QEMU 2.5.0, поэтому мы должны скомпилировать QEMU из источника. Но это не трудно. - GUI показывает, но не отвечает на мышь / клавиатуру, протестированную как на SDL, так и на VNC. Но CLI работает отлично. Таким образом, вы можете также использовать Lite изображение, которое имеет GO GUI на данный момент.
- нет сеть
в Ubuntu 16.04, в QEMU 2.5.0, Raspbian 2016-05-27, модифицированное ядро
этот метод использует -M versatilepb
который присутствует на QEMU 2.5.0 Ubuntu 16.04.
недостатком является то, что вам нужно загрузить измененное ядро (см. https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel), и измените изображение, чтобы оно было менее репрезентативным о реальной системе.
-
мы выбираем
4.4.12
так как это версия ядра в образе Raspbian.процесс генерации этого blob ядра описан в репозитории по адресу: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
зачем нужен этот дополнительный образ ядра: https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel
-
измените изображение Raspbian, как указано в: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
резюме:
-
смонтировать образ как для
-M raspi2
, но используйте второй раздел вместо первого:sudo mount /dev/loop0p2 /mnt/rpi
-
редактировать изображение:
# Comment out the line present there with # sudo vim /mnt/rpi/etc/ld.so.preload # Comment out the lines of type: "/dev/mmcblk*" sudo vim /mnt/rpi/etc/fstab
-
-
Run:
sudo apt-get install qemu-system-arm qemu-system-arm \ -kernel kernel-qemu-4.4.12-jessie \ -cpu arm1176 \ -m 256 \ -M versatilepb \ -no-reboot \ -serial stdio \ -append "root=/dev/sda2 panic=1 rootfstype=ext4 rw" \ -hda 2016-05-27-raspbian-jessie.img
[не удалось] Ubuntu 17.04, QEMU 2.8.0-M raspi2, Raspbian 2016-05-27, ядро ванили
на этом новом Ubuntu QEMU 2.8.0 по умолчанию, поэтому нам не нужно компилировать QEMU из источника для -M raspi2
. Однако 2.8.0 зависает при загрузке после сообщения:
Console: switching to colour frame buffer device 100x30
это показывает, насколько нестабильна -M raspi2
еще есть.
[не удалось] Ubuntu 16.04, QEMU 2.9.0-M raspi2, Raspbian 2017-08-16, ядро ванили
на этом новом образе, используя тот же метод для 2016-05-27, ядро паникует при загрузке с:
Please append a correct "root=" boot option; here are the available partitions:
...
[ 4.138114] ---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
bztsrc/raspi3-tutorial
RPI3 голый металл на QEMU
https://github.com/bztsrc/raspi3-tutorial хороший набор примеров которые как раз работают на QEMU, ultraquick получая начат на: https://raspberrypi.stackexchange.com/questions/34733/how-to-do-qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135