GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana cara meniru Raspberry Pi 2 di QEMU?

Jika Anda ingin menjalankan bot build Raspberry Pi 2 atau yang serupa, Anda harus melihat menjalankan Qemu dalam mode pengguna/statis. Saya mencobanya menggunakan Linux di mesin virtual, ini cukup cepat dibandingkan dengan emulasi sistem Qemu. Sayangnya, ini hanya mengemulasi CPU sehingga Anda tidak dapat menguji game atau Wayland/Weston.

Saya dapat membuat kernel untuk Pi 2 saya dalam waktu sekitar satu jam menggunakan metode ini.


Jika Anda merasa nyaman membangun qemu, Anda dapat menemukan dukungan untuk emulasi sistem pi2 di sini:https://github.com/0xabu/qemu. Ini tidak terlalu cepat, dan emulasi perangkat tidak lengkap, tetapi Anda dapat mengubah ukuran RAM dan framebuffer.

Ada instruksi singkat untuk mem-boot Raspbian di akhir https://github.com/0xabu/qemu/wiki


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

  1. Kompilasi QEMU 2.9.0 dari sumber:

    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. Unduh gambar dan ekstrak kernel dan dts darinya:

    1. Unduh gambar dan unzip:

      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. Pasang gambar kedua dari partisi. Cara termudah adalah:

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

      Ini hanya berfungsi dengan losetup terbaru di Ubuntu 16.04, metode lain di:https://askubuntu.com/questions/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576

      Ini mencetak perangkat loop, misalnya:

      /dev/loop0
      

      jadi kami melakukannya:

      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. Jalankan:

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

Anda kemudian dapat login di terminal yang ditampilkan di terminal host Anda.

Batasan saat ini:

  • -M raspi2 ditambahkan di QEMU 2.6.0, dan Ubuntu 16.04 hanya memiliki QEMU 2.5.0, jadi kita harus mengkompilasi QEMU dari sumber. Tapi ini tidak sulit.
  • GUI muncul tetapi tidak merespons mouse/keyboard, diuji pada SDL dan VNC. Tapi CLI bekerja dengan sempurna. Jadi Anda sebaiknya menggunakan gambar Lite yang sudah menggunakan GUI untuk saat ini.
  • tidak ada jaringan

Ubuntu 16.04, QEMU 2.5.0, Raspbian 27-05-2016, kernel yang dimodifikasi

Metode ini menggunakan -M versatilepb yang ada di QEMU 2.5.0 dari Ubuntu 16.04.

Sisi negatifnya adalah Anda harus mengunduh kernel yang dimodifikasi (lihat https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel ), dan memodifikasi gambar, jadi begitu kurang mewakili sistem sebenarnya.

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

    Kami memilih 4.4.12 karena itu adalah versi kernel di gambar Raspbian.

    Proses untuk menghasilkan blob kernel dijelaskan di dalam repositori di:https://github.com/dhruvvyas90/qemu-rpi-kernel/tree/36ede073f4ccb64f60200ede36c231afe9502070/tools

    Mengapa gambar kernel tambahan ini diperlukan:https://raspberrypi.stackexchange.com/questions/47124/emulating-with-qemu-why-the-extra-kernel

  2. Ubah gambar Raspbian seperti yang disebutkan di:https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c

    Ringkasan:

    1. Pasang gambar seperti yang kita lakukan untuk -M raspi2 , tetapi gunakan partisi kedua alih-alih yang pertama:

      sudo mount /dev/loop0p2 /mnt/rpi
      
    2. Edit gambar:

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

    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
    

[gagal] Ubuntu 17.04, QEMU 2.8.0 -M raspi2, Raspbian 27-05-2016, kernel vanilla

Di Ubuntu yang lebih baru ini, QEMU 2.8.0 adalah defaultnya, jadi kita tidak perlu mengkompilasi QEMU dari sumber untuk -M raspi2 . Namun, 2.8.0 macet saat boot setelah pesan:

Console: switching to colour frame buffer device 100x30

Ini menunjukkan betapa tidak stabilnya -M raspi2 masih.

[gagal] Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 16-08-2017, kernel vanilla

Pada gambar yang lebih baru ini, menggunakan metode yang sama untuk 27-05-2016, kernel panik saat boot dengan:

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 menyebutkan bahwa rootdelay=1 memecahkan ini, saya harus mencobanya.

bztsrc/raspi3-tutorial RPI3 logam polos di QEMU

https://github.com/bztsrc/raspi3-tutorial adalah kumpulan contoh bagus yang hanya berfungsi di QEMU, ultraquick memulai di:https://raspberrypi.stackexchange.com/questions/34733/how-to-do- qemu-emulation-for-bare-metal-raspberry-pi-images/85135#85135


Linux
  1. Bagaimana Linux datang ke mainframe

  2. Cara Menghidupkan Dan Mematikan Raspberry Pi [Tip Pemula Mutlak]

  3. Bagaimana Cara Menginstal R 3.3.1 Di Direktori Sendiri?

  1. Cara memutar layar pada Raspberry Pi 3

  2. Bagaimana cara mengubah nama host di Ubuntu

  3. Bagaimana cara men-debug kernel Linux dengan GDB dan QEMU?

  1. Bagaimana cara menggunakan perintah nama dasar?

  2. Bagaimana cara memeriksa HZ di terminal?

  3. Bagaimana cara mengekstrak isi rpm?