GNU/Linux >> Znalost Linux >  >> Linux

Jak emulovat Raspberry Pi 2 na QEMU?

Pokud chcete spustit sestavení robota Raspberry Pi 2 nebo něco podobného, ​​měli byste se podívat na spuštění Qemu v uživatelském/statickém režimu. Zkoušel jsem to pomocí Linuxu ve virtuálním stroji, je to docela rychlé ve srovnání s emulací systému Qemu. Bohužel pouze emuluje CPU, takže nebudete moci testovat hry ani Wayland/Weston.

Pomocí této metody jsem dokázal sestavit jádro pro svůj Pi 2 zhruba za hodinu.


Pokud vám vyhovuje vytváření qemu, můžete najít podporu pro emulaci systému pi2 zde:https://github.com/0xabu/qemu. Není to nijak zvlášť rychlé a emulace zařízení jsou neúplné, ale můžete změnit velikost paměti RAM a framebufferu.

Stručné pokyny pro zavedení Raspbianu jsou na konci https://github.com/0xabu/qemu/wiki


Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, vanilkové jádro

  1. Zkompilujte QEMU 2.9.0 ze zdroje:

    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. Stáhněte si obrázek a extrahujte z něj jádro a dts:

    1. Stáhněte si obrázek a rozbalte jej:

      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. Připojte druhý obraz oddílu. Nejjednodušší způsob je:

      sudo losetup -f --show -P 2016-05-27-raspbian-jessie.img
      

      Toto funguje pouze s nejnovější verzí losetup na Ubuntu 16.04, další metody na:https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Tím se vytiskne smyčkové zařízení, např.:

      /dev/loop0
      

      takže děláme:

      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
      
  3. Spustit:

    ./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 \
    ;
    

Poté se můžete přihlásit na terminálu, který se zobrazuje na vašem hostitelském terminálu.

Aktuální omezení:

  • -M raspi2 byl přidán v QEMU 2.6.0 a Ubuntu 16.04 má pouze QEMU 2.5.0, takže musíme zkompilovat QEMU ze zdroje. Ale to není těžké.
  • GUI se zobrazuje, ale nereaguje na myš / klávesnici, testováno na SDL i VNC. Ale CLI funguje perfektně. Můžete tedy také použít obrázek Lite, který má prozatím GUI go.
  • žádné připojení k síti

Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, upravené jádro

Tato metoda používá -M versatilepb který je přítomen na QEMU 2.5.0 Ubuntu 16.04.

Nevýhodou je, že si musíte stáhnout upravené jádro (viz https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel) a upravit obrázek, takže je méně reprezentativní pro skutečný systém.

  1. Stáhnout:https://github.com/dhruvvyas90/qemu-rpi-kernel/blob/36ede073f4ccb64f60200ede36c231afe9502070/kernel-qemu-4.4.12-jessie

    Vybíráme 4.4.12 protože to je verze jádra v obrazu Raspbian.

    Proces generování tohoto kernel blob je popsán v úložišti na adrese:https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Proč je potřeba tento extra obrázek jádra:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  2. Upravte obrázek Raspbian, jak je uvedeno na:https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20ca>

    Shrnutí:

    1. Připojte obraz stejně jako my pro -M raspi2 , ale použijte druhý oddíl místo prvního:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. Upravte obrázek:

      # 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. Spustit:

    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
    

[Neselhalo] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 2016-05-27, vanilkové jádro

Na tomto novějším Ubuntu je QEMU 2.8.0 výchozí, takže nemusíme kompilovat QEMU ze zdroje pro -M raspi2 . 2.8.0 se však zablokuje při spouštění po zprávě:

Console: switching to colour frame buffer device 100x30

To ukazuje, jak nestabilní -M raspi2 stále je.

[Neselhalo] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2017-08-16, vanilkové jádro

Na tomto novějším obrazu, za použití stejné metody pro 27. 5. 2016, jádro při startu zpanikaří:

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 uvádí, že rootdelay=1 to řeší, musím to vyzkoušet.

bztsrc/raspi3-tutorial RPI3 holý kov na QEMU

https://github.com/bztsrc/raspi3-tutorial je dobrá sada příkladů, které prostě fungují na QEMU, ultrarychlý začátek na:https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135


Linux
  1. Jak se Linux dostal k sálovému počítači

  2. Jak používat příkaz basename?

  3. Jak otočit obrazovku na Raspberry Pi 3

  1. Jak zapnout a vypnout Raspberry Pi [Tip pro absolutního začátečníka]

  2. Jak nainstalovat R 3.3.1 do vlastního adresáře?

  3. Jak změnit název hostitele na Ubuntu

  1. Jak ladit linuxové jádro pomocí GDB a QEMU?

  2. Jak zkontrolovat HZ v terminálu?

  3. Jak extrahuji obsah rpm?