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
-
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`
-
Unduh gambar dan ekstrak kernel dan dts darinya:
-
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
-
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#496576Ini 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
-
-
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.
-
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
-
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:
-
Pasang gambar seperti yang kita lakukan untuk
-M raspi2
, tetapi gunakan partisi kedua alih-alih yang pertama:sudo mount /dev/loop0p2 /mnt/rpi
-
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
-
-
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