Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, núcleo de vainilla
Pasos:
Compile QEMU 2.9.0 de 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
Monta 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 lo último losetup
en Ubuntu 16.04, otros métodos en: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Esto imprime un dispositivo de bucle, por ejemplo:
/dev/loop0
entonces hacemos:
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
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 \
;
Luego 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 en SDL y VNC. Pero CLI funciona perfectamente sin embargo. Por lo tanto, también podría 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 el -M versatilepb
que está presente en QEMU 2.5.0 de Ubuntu 16.04.
La desventaja es que debe descargar un kernel modificado (consulte Emulación con Qemu: ¿por qué el kernel adicional? ), 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 Raspbian.
El proceso para generar esa gota de 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? Emulación con Qemu: ¿por qué el kernel adicional?
Modifique la imagen 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
[fallido] 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 -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 que -M raspi2
aún es inestable .
[fallido] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, núcleo de vainilla
En esta imagen más nueva, usando el mismo método para 2016-05-27, el núcleo 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)
bztsrc/raspi3-tutorial
RPI3 metal desnudo en QEMU
https://github.com/bztsrc/raspi3-tutorial es un buen conjunto de ejemplos que simplemente funcionan en QEMU, comenzando ultra rápido en: Cómo hacer la emulación QEMU para imágenes de Raspberry Pi de metal desnudo