2015-03-05 11 views
11

Qualche tempo fa ho emulato il Raspberry Pi seguente this article, ma questo approccio ha diversi problemi:emulando il Raspberry Pi 2

  1. E 'molto lento.
  2. La soluzione di visualizzazione è limitata a 800x600.
  3. Non è possibile emulare più di 256mb di RAM.

Inoltre, non c'è emulazione per la nuova Broadcom BCM2836 o qualsiasi altra CPU basata su arm7 in Qemu. Tuttavia, ci sono diversi motivi, perché sarebbe interessante emulare il Raspberry Pi. Quindi sono interessato a qualsiasi suggerimento che mi spinga nella giusta direzione per ottenere un'emulazione Raspberry Pi 2 funzionante usando Qemu o qualsiasi altro software di emulazione sotto Linux.

+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

+0

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. –

risposta

5

Se hai dimestichezza con qemu, puoi trovare 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 Raspbian alla fine del https://github.com/0xabu/qemu/wiki

+1

A partire da QEMU 2.6 il tipo di macchina 'raspi2' fa parte dello standard QEMU. – dubek

11

Se si desidera eseguire un bot di compilazione Raspberry Pi 2 o qualcosa di simile, si consiglia di eseguire Qemu in user/static mode. Ho provato questo 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 i giochi o Wayland/Weston.

Sono stato in grado di creare un kernel per il mio Pi 2 in circa un'ora usando questo metodo.

+0

Grazie, per la risposta. Farò un tentativo e accetto la risposta se ha funzionato. – Phidelux

+0

Chiedo dove si sta lavorando un kernel Linux QEMU funzionante per l'esecuzione del Pi? Tutto il post che ho trovato punta a http://xecdesign.com/downloads/linux-qemu/kernel-qemu ma questa pagina sembra essere stata cancellata da molto tempo. – rbaleksandar

+0

@rbaleksandar Ho trovato una copia su https://github.com/dhruvvyas90/qemu-rpi-kernel –

0

Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016/05/27, kernel vanilla

enter image description here

  1. 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` 
    
  2. Scarica immagine ed estrarre il kernel e dts da esso:

    1. 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 
      
    2. 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 
      
  3. 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.

  1. 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

  2. modificare l'immagine Raspbian come accennato: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c

    Sommario:

    1. 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 
      
    2. 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 
      
  3. 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)