Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016/05/27, kernel vanilla
Compile QEMU 2.9.0 dai sorgenti:
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 immagine ed estrarre il kernel e dts da esso:
Scarica l'immagine e decomprimerlo:
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
Questo funziona solo con le più recenti losetup
su Ubuntu 16.04, altri metodi a: https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576
Questo stampa un dispositivo di loop, per esempio:
/dev/loop0
così 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
Run:
./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 effettuare il login sul terminale che mostra sul terminale host.
limitazioni attuali:
-M raspi2
stato inserito in QEMU 2.6.0, e Ubuntu 16.04 ha solo QEMU 2.5.0, quindi dobbiamo compilare QEMU dalla sorgente. Ma questo non è difficile.
- la GUI mostra ma non risponde al mouse/tastiera, testato su SDL e VNC. Ma CLI funziona perfettamente tuttavia. Quindi potresti anche usare l'immagine Lite che ha per ora GUI.
- nessun collegamento
Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016/05/27, kernel modificato
Questo metodo utilizza -M versatilepb
che è presente sulla QEMU 2.5 .0 di Ubuntu 16.04.
Lo svantaggio è che è necessario scaricare un kernel modificato (vedere https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) e modificare l'immagine, quindi è meno rappresentativo del sistema reale.
download: https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie
Prendiamo 4.4.12
dal momento che è la versione del kernel nell'immagine Raspbian.
Il processo per generare quel blob kernel è descritta in nel repository a: https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools
Perché è necessaria questa immagine del kernel in più: https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel
modificare l'immagine Raspbian come accennato: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Sommario:
Montare l'immagine proprio come noi d id per il -M raspi2
, ma usare la seconda partizione al posto del primo:
sudo mount /dev/loop0p2 /mnt/rpi
Modificare 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
Run:
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 2016-05-27, kernel vanilla
Su questo Ubuntu più recente, QEMU 2.8.0 è l'impostazione predefinita, quindi non è necessario compilare QEMU dalla sorgente per -M raspi2
. Tuttavia, 2.8.0 si blocca sul caricamento del sistema dopo il messaggio:
Console: switching to colour frame buffer device 100x30
Questo sta a dimostrare come instabile -M raspi2
è ancora.
[fallito] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017/08/16, kernel vanilla
su questa immagine più recente, utilizzando lo stesso metodo per 2016/05/27, il kernel panics 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)
Questo post ha 2 anni, mentre il collegamento a cui si fa riferimento è di 1 anno. Inoltre l'autore della domanda chiede di eseguire raspbian usando qemu, mentre questa domanda richiede l'emulazione di un determinato hardware. – Phidelux
L'età non è l'attuale criterio principale di dupe, è più upvotes: http://meta.stackexchange.com/questions/147643/should-i-vote-to-close-a-duplicate-question-even-though-its -much-newer-and-ha Ma in questo caso hai ragione visto che hanno gli stessi upvotes. –