Si desea ejecutar un bot de compilación Raspberry Pi 2 o algo similar, debería echar un vistazo a ejecutar Qemu en modo usuario/estático. Probé esto usando Linux en una máquina virtual, es bastante rápido en comparación con la emulación del sistema Qemu. Lamentablemente, solo emula la CPU, por lo que no podrá probar juegos ni Wayland/Weston.
Pude construir un kernel para mi Pi 2 en aproximadamente una hora usando este método.
Si se siente cómodo construyendo qemu, puede encontrar soporte para la emulación del sistema pi2 aquí:https://github.com/0xabu/qemu. No es particularmente rápido y las emulaciones de dispositivos están incompletas, pero puede cambiar el tamaño de la memoria RAM y el búfer de cuadros.
Hay breves instrucciones para iniciar Raspbian al final de https://github.com/0xabu/qemu/wiki
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, núcleo de vainilla
-
Compile QEMU 2.9.0 desde la fuente:
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`
-
Descargue la imagen y extraiga el kernel y dts de ella:
-
Descarga la imagen y descomprímela:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip unzip 2016-05-27-raspbian-jessie.zip
-
Monte la segunda imagen de la partición. La forma más fácil es:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Esto solo funciona con el último
losetup
en Ubuntu 16.04, otros métodos en:https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Esto imprime un dispositivo de bucle, por ejemplo:
/dev/loop0
así lo hacemos:
sudo mkdir /mnt/rpi sudo mount /dev/loop0p1 /mnt/rpi cp /mnt/rpi/kernel7.img . cp /mnt/rpi/bcm2709-rpi-2-b.dtb . sudo umount /mnt/rpi sudo losetup -d /dev/loop0
-
-
Ejecutar:
./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 \ ;
A continuación, puede iniciar sesión en el terminal que se muestra en su terminal host.
Limitaciones actuales:
-M raspi2
se agregó en QEMU 2.6.0, y Ubuntu 16.04 solo tiene QEMU 2.5.0, por lo que debemos compilar QEMU desde la fuente. Pero esto no es difícil.- la GUI muestra pero no responde al mouse/teclado, probado en SDL y VNC. Pero CLI funciona perfectamente sin embargo. Por lo tanto, también podría usar la imagen Lite que tiene go GUI por ahora.
- sin redes
Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, núcleo modificado
Este método usa -M versatilepb
que está presente en QEMU 2.5.0 de Ubuntu 16.04.
Lo malo es que hay que descargar un kernel modificado (ver https://raspberrypi.stackexchange.com/questions/47124/emulator-with-qemu-why-the-extra-kernel), y modificar la imagen, para que quede menos representativo del sistema real.
-
Descarga:https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Elegimos
4.4.12
ya que esa es la versión del kernel en la imagen de Raspbian.El proceso para generar ese blob del kernel se describe en el repositorio en:https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Por qué se necesita esta imagen extra del núcleo:https://raspberrypi.stackexchange.com/questions/47124/emulator-with-qemu-why-the-extra-kernel
-
Modifique la imagen de Raspbian como se menciona en:https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Resumen:
-
Monte la imagen tal como lo hicimos para el
-M raspi2
, pero use la segunda partición en lugar de la primera:sudo mount /dev/loop0p2 /mnt/rpi
-
Edite la imagen:
# 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
-
-
Ejecutar:
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
[fallido] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, kernel de vainilla
En este Ubuntu más nuevo, QEMU 2.8.0 es el predeterminado, por lo que no necesitamos compilar QEMU desde la fuente para -M raspi2
. Sin embargo, 2.8.0 se bloquea en el arranque después del mensaje:
Console: switching to colour frame buffer device 100x30
Esto demuestra cuán inestable -M raspi2
todavía lo es.
[fallido] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, kernel de vainilla
En esta imagen más nueva, usando el mismo método para 2016-05-27, el kernel entra en pánico al arrancar con:
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)
TODO:sschoof menciona que rootdelay=1
resuelve esto, tengo que probarlo.
bztsrc/raspi3-tutorial
Metal desnudo RPI3 en QEMU
https://github.com/bztsrc/raspi3-tutorial es un buen conjunto de ejemplos que solo funcionan en QEMU, un comienzo ultrarrápido en:https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulación-para-bare-metal-raspberry-pi-images/85135#85135