Come posso collegare una scheda SD contenente un sistema operativo Raspberry Pi al mio PC Linux e avviare il sistema operativo in un emulatore?
Perché VMWare non funziona?
Quali sono i limiti di questo metodo?
Correlati: emulazione su un PC Windows
Come posso collegare una scheda SD contenente un sistema operativo Raspberry Pi al mio PC Linux e avviare il sistema operativo in un emulatore?
Perché VMWare non funziona?
Quali sono i limiti di questo metodo?
Correlati: emulazione su un PC Windows
Risposte:
Sì, questo è completamente possibile. Tuttavia, in realtà è un po 'diverso da come stai pensando.
La scheda SD contiene un'immagine del sistema operativo. E funziona gonfiando questa immagine quando il dispositivo è acceso.
Come mi aspettavo già sapete, si esegue il flashing di questa immagine sulla scheda SD per creare un sistema funzionante. Tuttavia, ciò che puoi fare prima di mostrare l'immagine è giocarci su usando QEMU , che è un emulatore del processore e ci consente di emulare il set di istruzioni ARM.
In questo modo, tutte le modifiche apportate all'immagine (installazione, compilazione, ecc.) Rimarranno comunque disponibili dopo averlo trasferito sulla scheda SD.
Ora ti spiegherò come utilizzare QEMU per caricare l'immagine. Dimostrerò con l'immagine Arch Linux, ma il processo dovrebbe essere lo stesso a prescindere.
Dovrai acquisire QEMU per il tuo sistema. QEMU dovrebbe avere un solo requisito, affinché i dispositivi di input funzionino, è necessario disporre del pacchetto di sviluppo SDL installato, che dovrebbe essere disponibile dal gestore dei pacchetti.
Ti consiglio di scaricare il pacchetto usando il tuo normale gestore pacchetti:
Arco :
sudo pacman -S sdl qemu
Ubuntu :
Le versioni più recenti (dal 14.04) hanno un pacchetto per esso:
sudo apt-get install qemu-system-arm
Per le versioni precedenti:
sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system
Costruisci QEMU da solo
In alternativa, puoi creare QEMU da solo. Questo è fantastico se vuoi provare una nuova versione, ma può essere lento ed essere preparato per molti errori durante la compilazione! Si noti che se si crea QEMU dal proprio sito Web, è necessario compilarlo per il supporto ARM. Quindi controlla prima i tuoi repository distro. Questo può essere fatto in questo modo;
mkdir rpi-emu && cd rpi-emu
wget http://wiki.qemu.org/download/qemu-1.1.0-1.tar.bz2
tar xvjf qemu-1.1.0-1.tar.bz2
cd qemu-1.1.0-1
./configure –target-list=arm-softmmu,arm-linux-user
make
sudo make install
Verifica di disporre del supporto ARM con:
qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard
Stiamo lavorando con Arch Linux, quindi utilizzeremo l'immagine Arch Arm. Ma sostituiscilo con qualunque cosa tu voglia lavorare, o forse hai già un'immagine. In tal caso, saltare questo passaggio.
wget http://anorien.csc.warwick.ac.uk/mirrors/raspberrypi.org/images/archlinuxarm/archlinuxarm-29-04-2012/archlinuxarm-29-04-2012.zip
unzip archlinuxarm-29-04-2012.zip
Per far funzionare QEMU abbiamo anche bisogno dell'immagine del kernel (che sarebbe all'interno del file .img).
Nota: non penso che questo passaggio sia necessario per Debian. Qualcuno per favore conferma.
Fortunatamente ci sono immagini precompilate disponibili e puoi usare quella da qui ( download diretto ).
TODO: Dimostrare come compilare un'immagine del kernel qui?
Ora dovresti avere:
La macchina virtuale può ora essere avviata utilizzando il seguente comando a rotazione lunga:
qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks
Nota che avrai solo diverse centinaia di megabyte di spazio di archiviazione usando questo metodo (qualunque cosa sia di riserva sull'immagine). È possibile creare un disco rigido virtuale seguendo la guida per l'utente di QEMU .
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 27/05/2016, kernel vanilla
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 losetupversioni di Ubuntu 16.04, altri metodi su: https://askubuntu.com/questions/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.Ubuntu 16.04, QEMU 2.5.0, Raspbian 27/05/2016, kernel modificato

Questo metodo utilizza quello -M versatilepbpresente 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.
Scegliamo 4.4.12poiché 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 raspi2sia 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
Non puoi fare ciò che stai suggerendo, perché Raspberry Pi ha un'architettura di processore diversa rispetto alla maggior parte dei PC. Mentre la maggior parte dei PC sono basati su x86, RPi è un computer basato su ARM.
Questo è lo stesso motivo per cui non è possibile eseguire, ad esempio, Microsoft Windows su RPi.
VmWare non funzionerà perché può virtualizzare solo i sistemi operativi basati su x86 (32-bit e 64-bit). Esistono altri emulatori che possono virtualizzare ARM, come QEMU, ma quelli eseguono un'emulazione software completa senza il supporto di virtualizzazione della CPU nativa, quindi puoi aspettarti che siano abbastanza lenti.
Puoi facilmente provare un simulatore di Raspberry Pi incluso con sensore, riga di comando ed editor di file su iotify.io. Consulta la nostra documentazione su https://docs.iotify.io/ per iniziare con i diversi progetti, sistemi operativi e familiarizzare con l'ambiente di lavoro di Raspberry Pi.