Solución:
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 sencilla es:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Esto solo funciona con la última
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í que 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
-
-
Correr:
./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 tenemos que compilar QEMU desde la fuente. Pero esto no es difícil. - la GUI muestra pero no responde al mouse / teclado, probado tanto en SDL como en VNC. Sin embargo, CLI funciona perfectamente. Por lo tanto, también puede usar la imagen Lite que tiene GUI por ahora.
- sin redes
Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, kernel modificado
Este método utiliza -M versatilepb
que está presente en QEMU 2.5.0 de Ubuntu 16.04.
La desventaja es que debe descargar un kernel modificado (consulte https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) y modificar la imagen, por lo que es menos representativo del sistema real.
-
Descargar: 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 de kernel adicional: https://raspberrypi.stackexchange.com/questions/47124/emulating-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
-
Edita 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
-
-
Correr:
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
[failed] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, núcleo 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 al arrancar después del mensaje:
Console: switching to colour frame buffer device 100x30
Esto demuestra lo inestable -M raspi2
todavía lo es.
[failed] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, núcleo de vainilla
En esta imagen más reciente, 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
RPI3 bare metal en QEMU
https://github.com/bztsrc/raspi3-tutorial es un buen conjunto de ejemplos que simplemente funcionan en QEMU, inicio ultrarrápido en: https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images / 85135 # 85135
Si desea ejecutar un bot de compilación de Raspberry Pi 2 o algo similar, debe echar un vistazo a la ejecución de Qemu en modo de 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. Desafortunadamente, solo emula la CPU, por lo que no podrá probar juegos o 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 del dispositivo están incompletas, pero puede cambiar el tamaño de la RAM y el framebuffer.
Hay breves instrucciones para arrancar Raspbian al final de https://github.com/0xabu/qemu/wiki