Se vuoi eseguire un build bot Raspberry Pi 2 o qualcosa di simile, dovresti dare un'occhiata all'esecuzione di Qemu in modalità utente/statica. L'ho provato usando Linux in una macchina virtuale, è abbastanza veloce rispetto all'emulazione del sistema Qemu. Sfortunatamente emula solo la CPU, quindi non sarai in grado di testare giochi o Wayland/Weston.
Sono stato in grado di creare un kernel per il mio Pi 2 in circa un'ora utilizzando questo metodo.
Se hai dimestichezza con la creazione di qemu, puoi trovare il supporto per l'emulazione del sistema pi2 qui:https://github.com/0xabu/qemu. Non è particolarmente veloce e le emulazioni del dispositivo sono incomplete, ma puoi ridimensionare la RAM e il framebuffer.
Ci sono brevi istruzioni per l'avvio di Raspbian alla fine di https://github.com/0xabu/qemu/wiki
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla
-
Compila QEMU 2.9.0 dal sorgente:
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 essa:
-
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
-
Monta la seconda immagine della partizione. Il modo più semplice è:
sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
Funziona solo con l'ultimo
losetup
su Ubuntu 16.04, altri metodi su:https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Questo stampa un dispositivo loop, ad esempio:
/dev/loop0
quindi facciamo:
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
-
-
Esegui:
./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 \ ;
Puoi quindi effettuare il login sul terminale visualizzato sul tuo terminale host.
Limiti 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 non è difficile.- la GUI mostra ma non risponde al mouse/tastiera, testata sia su SDL che su VNC. Ma la CLI funziona perfettamente comunque. Quindi potresti anche usare l'immagine Lite che per ora ha la GUI.
- nessuna rete
Ubuntu 16.04, QEMU 2.5.0, Raspbian 27-05-2016, kernel modificato
Questo metodo usa -M versatilepb
che è presente su QEMU 2.5.0 di Ubuntu 16.04.
Lo svantaggio è che devi scaricare un kernel modificato (vedi https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) 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é questa è 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 del kernel aggiuntiva:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel
-
Modifica l'immagine Raspbian come indicato su:https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Sommario:
-
Monta l'immagine proprio come abbiamo fatto per il
-M raspi2
, ma usa la seconda partizione invece della 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
-
-
Esegui:
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 questo Ubuntu più recente, 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 sia instabile -M raspi2
lo è ancora.
[fallito] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 16-08-2017, kernel vanilla
In questa immagine più recente, utilizzando lo stesso metodo per il 27-05-2016, il kernel va 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)
TODO:sschoof menziona quel rootdelay=1
risolve questo problema, devo provarlo.
bztsrc/raspi3-tutorial
RPI3 metallo nudo su QEMU
https://github.com/bztsrc/raspi3-tutorial è un buon set di esempi che funzionano solo su QEMU, ultrarapido per iniziare su:https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135