Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27/05/2016, kernel vanilla
passi:
Compilare QEMU 2.9.0 dall'origine:
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`
Scarica l'immagine ed estrai il kernel e il dts da esso:
Scarica l'immagine e decomprimila:
wget http://downloads.raspberrypi.org/raspbian/images/raspbian-2016-05-31/2016-05-27-raspbian-jessie.zip
unzip 2016-05-27-raspbian-jessie.zip
Montare la seconda immagine della partizione. Il modo più semplice è:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Funziona solo con le ultime losetup
versioni di Ubuntu 16.04, altri metodi su: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Questo stampa un dispositivo ad anello, ad esempio:
/dev/loop0
quindi facciamo:
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
Correre:
./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 \
;
È quindi possibile accedere al terminale che mostra sul terminale host.
Limitazioni attuali:
-M raspi2
è stato aggiunto in QEMU 2.6.0 e Ubuntu 16.04 ha solo QEMU 2.5.0, quindi dobbiamo compilare QEMU dal sorgente. Ma questo non è difficile.
- la GUI mostra ma non risponde al mouse / tastiera, testato su SDL e VNC. Ma CLI funziona perfettamente comunque. Quindi potresti anche usare l'immagine Lite che per ora è diventata GUI.
- nessuna rete
Ubuntu 16.04, QEMU 2.5.0, Raspbian 27/05/2016, kernel modificato
Questo metodo utilizza quello -M versatilepb
presente su QEMU 2.5.0 di Ubuntu 16.04.
Il rovescio della medaglia è che devi scaricare un kernel modificato (vedi Emulazione con Qemu: perché il kernel extra? ), E modificare l'immagine, quindi è meno rappresentativo del sistema reale.
Scarica: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Scegliamo 4.4.12
poiché quella è la versione del kernel nell'immagine Raspbian.
Il processo per generare quel BLOB del kernel è descritto nel repository all'indirizzo: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Perché è necessaria questa immagine extra del kernel: Emulazione con Qemu: perché il kernel aggiuntivo?
Modifica l'immagine di Raspbian come indicato in: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Sommario:
Montare l'immagine come abbiamo fatto per il -M raspi2
, ma utilizzare la seconda partizione anziché la prima:
sudo mount /dev/loop0p2 /mnt/rpi
Modifica l'immagine:
# 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
Correre:
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
[fallito] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 27/05/2016, kernel vanilla
Su questa nuova Ubuntu, QEMU 2.8.0 è l'impostazione predefinita, quindi non è necessario compilare QEMU dal sorgente per -M raspi2
. Tuttavia, 2.8.0 si blocca all'avvio dopo il messaggio:
Console: switching to colour frame buffer device 100x30
Questo dimostra quanto -M raspi2
sia ancora instabile .
[fallito] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, kernel vanilla
Su questa immagine più recente, usando lo stesso metodo per 27/05/2016, il kernel si mette in panico all'avvio 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 bare metal su QEMU
https://github.com/bztsrc/raspi3-tutorial è una buona serie di esempi che funzionano solo su QEMU, ultraquick per iniziare da: Come eseguire l'emulazione QEMU per immagini Raspberry Pi bare metal