Emulasi pada PC Linux

48

Bagaimana saya bisa menghubungkan kartu SD yang berisi Raspberry Pi OS ke PC Linux saya, dan boot OS di emulator?

Mengapa VMWare tidak berfungsi?

Apa keterbatasan metode ini?

Terkait: Emulasi pada PC Windows

Alex L
sumber
Bukankah ini pertanyaan virtualisasi alih-alih pertanyaan persaingan?
Zoot
1
Saya tidak suka emulasi ke edit virtualisasi ... bisakah kita mengobrol tentang hal itu?
Alex Chamberlain
2
Masalah dasar adalah bahwa Pi memiliki cpu ARM yang tidak kompatibel dengan x86 yang merupakan cara VMWare tahu cara menjalankannya. Anda membutuhkan emulator.
Thorbjørn Ravn Andersen
Perhatikan bahwa versi debian yang disesuaikan dengan banyak fitur Raspbian (termasuk lingkungan desktop PIXEL, dan sebagian besar aplikasi) tersedia untuk diunduh dari situs Raspberry Pi
angussidney

Jawaban:

52

Ya ini sepenuhnya mungkin. Namun, pada kenyataannya itu sedikit berbeda dengan cara Anda berpikir.


Pembukaan

Kartu SD berisi gambar sistem operasi. Dan berfungsi dengan menggembungkan gambar ini saat perangkat dihidupkan.

Seperti yang saya harapkan Anda sudah tahu, Anda mem-flash gambar ini ke kartu SD untuk membuat sistem kerja. Namun, apa yang dapat Anda lakukan sebelum mem-flash gambar adalah bermain-main dengannya menggunakan QEMU , yang merupakan emulator prosesor , dan memungkinkan kami untuk meniru set instruksi ARM.

Dengan cara ini, setiap perubahan yang Anda lakukan pada gambar (menginstal, mengkompilasi dll) akan tetap ada setelah Anda mem-flash-nya ke kartu SD.

Sekarang saya akan membicarakan cara menggunakan QEMU untuk memuat gambar. Saya akan menunjukkan dengan gambar Arch Linux, tetapi prosesnya harus tetap sama.


Menggunakan QEMU

Prasyarat

Anda perlu memperoleh QEMU untuk sistem Anda. QEMU seharusnya hanya memiliki satu persyaratan, agar perangkat input berfungsi, Anda perlu menginstal paket pengembangan SDL, yang harus tersedia dari manajer paket Anda.

Saya sarankan mengunduh paket menggunakan manajer paket reguler Anda:

Lengkungan :

sudo pacman -S sdl qemu

Ubuntu :

Versi yang lebih baru (sejak 14.04) memiliki paket untuk itu:

sudo apt-get install qemu-system-arm

Untuk versi yang lebih lama:

sudo apt-get install libsdl-dev
sudo add-apt-repository ppa:linaro-maintainers/tools
sudo apt-get update
sudo apt-get install qemu-system

Bangun QEMU sendiri

Atau, Anda dapat membangun QEMU sendiri. Ini bagus jika Anda ingin mencoba versi baru, tetapi bisa lambat dan bersiaplah untuk banyak kesalahan selama kompilasi! Perhatikan bahwa jika membangun QEMU dari situs web mereka, itu harus dikompilasi untuk dukungan ARM. Jadi, periksa repositori distro Anda terlebih dahulu. Ini bisa dilakukan seperti itu;

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

Pastikan Anda memiliki dukungan ARM dengan:

qemu-system-arm --version
QEMU emulator version 1.0,1, Copyright (c) 2003-2008 Fabrice Bellard

Memperoleh Gambar

Kami sedang bekerja dengan Arch Linux, jadi akan menggunakan gambar Arch Arm. Tetapi gantilah ini dengan apa pun yang ingin Anda kerjakan, atau mungkin Anda sudah memiliki gambar. Dalam hal ini, lewati langkah ini.

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 

Agar QEMU berfungsi, kita juga membutuhkan gambar kernel (yang akan berada di dalam file .img).

Catatan: Saya rasa langkah ini tidak diperlukan untuk Debian. Seseorang tolong konfirmasi.

Untungnya ada gambar yang telah dikompilasi tersedia, dan Anda dapat menggunakannya dari sini ( unduh langsung ).

TODO: Tunjukkan cara mengkompilasi gambar kernel di sini?

Mulai VM

Anda sekarang harus memiliki:

  • File img yang dapat Anda verifikasi menggunakan sha1 yang disediakan (disarankan).
  • Gambar kernel (zImage).
  • QEMU untuk ARM.

Mesin Virtual sekarang dapat mulai menggunakan perintah panjang lebar berikut ini:

qemu-system-arm -kernel zImage -cpu arm1176 -M versatilepb -serial stdio -append "root=/dev/sda2" -hda archlinuxarm-29-04-2012.img -clock dynticks

Perhatikan bahwa Anda hanya akan memiliki beberapa ratus megabyte penyimpanan menggunakan metode ini (apa pun yang ada di gambar). Hard disk virtual dapat dibuat dengan mengikuti panduan pengguna QEMU .

Jivings
sumber
Ini lebih dari apa yang saya kejar - terima kasih! Ini adalah jawaban referensi yang bagus
Alex L
@ Alex Tidak masalah, beri tahu saya jika Anda membutuhkan saya untuk menjelaskan. Juga, beri tahu saya jika gambar debian berfungsi dan kita bisa menambahkannya ke instruksi jika berbeda.
Jivings
Ada langkah-langkah yang cukup menyeluruh di sini
Alex L
@ Alex Itu bagus, saya belum pernah melihatnya.
Jivings
2
Yang lain ditutup, jadi yang bisa saya lakukan adalah memilih untuk membuka kembali
Jivings
8

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

masukkan deskripsi gambar di sini

  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 dari itu:

    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 partisi. Cara termudah adalah:

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

      Ini hanya bekerja dengan yang terbaru losetupdi 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 lakukan:

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

    ./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 raspi2ditambahkan di QEMU 2.6.0, dan Ubuntu 16.04 hanya memiliki QEMU 2.5.0, jadi kita harus mengkompilasi QEMU dari source. Tapi ini tidak sulit.
  • GUI menunjukkan tetapi tidak merespons ke mouse / keyboard, diuji pada SDL dan VNC. Namun CLI bekerja dengan sempurna. Jadi Anda mungkin juga menggunakan gambar Lite yang sudah masuk GUI untuk saat ini.
  • tidak ada jaringan

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

Metode ini menggunakan -M versatilepbyang ada pada QEMU 2.5.0 dari Ubuntu 16.04.

Kelemahannya adalah Anda harus mengunduh kernel yang dimodifikasi (lihat Emulasi dengan Qemu: mengapa kernel ekstra? ), Dan memodifikasi gambar, sehingga kurang mewakili sistem nyata.

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

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

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

    Mengapa gambar kernel tambahan ini diperlukan: Emulasi dengan Qemu: mengapa kernel ekstra?

  2. Ubah gambar Raspbian sebagaimana 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 kami lakukan untuk -M raspi2, tetapi gunakan partisi kedua, bukan 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. Lari:

    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 2016-05-27, vanilla kernel

Di Ubuntu yang lebih baru ini, QEMU 2.8.0 adalah default, jadi kami tidak perlu mengkompilasi QEMU dari sumber -M raspi2. Namun, 2.8.0 hang saat boot setelah pesan:

Console: switching to colour frame buffer device 100x30

Ini menunjukkan bahwa -M raspi2masih tidak stabil .

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

Pada gambar yang lebih baru ini, menggunakan metode yang sama untuk 2016-05-27, 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)

bztsrc/raspi3-tutorial RPI3 bare metal di QEMU

https://github.com/bztsrc/raspi3-tutorial adalah sekumpulan contoh yang bagus yang hanya bekerja pada QEMU, ultraquick untuk memulai di: Cara melakukan emulasi QEMU untuk gambar Raspberry Pi logam kosong

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
2
Bung, kamu hebat!
Subin
4

Anda tidak dapat melakukan apa yang Anda sarankan, karena Raspberry Pi memiliki arsitektur prosesor yang berbeda dari kebanyakan PC. Sementara sebagian besar PC berbasis x86, RPi adalah komputer berbasis ARM.

Ini adalah alasan yang sama dengan mengapa Anda tidak dapat menjalankan, misalnya, Microsoft Windows pada RPi.

VmWare tidak akan berfungsi, karena hanya dapat memvirtualisasikan sistem operasi berbasis x86 (32-bit dan 64-bit). Ada emulator lain yang dapat memvirtualisasikan ARM, seperti QEMU, tetapi mereka menjalankan emulasi perangkat lunak lengkap tanpa dukungan virtualisasi CPU asli, sehingga Anda dapat mengharapkan mereka menjadi sangat lambat.

Komunitas
sumber
3
Bisakah Anda memasukkan beberapa informasi lebih lanjut tentang cara mengemulasi RasPi di x86 (yaitu dengan QEMU)? Itulah yang ingin saya fokuskan pada pertanyaan ini, walaupun penjelasannya sangat saya hargai.
Alex L
3
Maaf untuk memilih, tapi ini tidak menjelaskan bagaimana mencapai apa yang dibutuhkan penanya.
G-.
Di sisi lain, ini membahas poin-poin lain dari pertanyaan yang tidak dijawab oleh jawaban lainnya. Saya pikir downvotes Anda tidak pantas (tidak seperti pertanyaan ini juga mengarah)
3
Bahkan tanpa dukungan virt asli, lambat cukup relatif karena Anda mungkin virtualisasi pada mesin jauh lebih kuat daripada pi raspberry
Kenneth Wilke
0

Anda dapat dengan mudah mencoba simulator Raspberry Pi yang disertakan dengan sensor, command line, dan editor file di iotify.io. Lihat dokumentasi kami di https://docs.iotify.io/ untuk memulai dengan berbagai proyek, OS dan buat diri Anda terbiasa dengan lingkungan kerja Raspberry Pi.

masukkan deskripsi gambar di sini

beri tahu
sumber
1
Sementara secara teknis ini adalah jawaban, Anda cukup jelas menggunakan situs kami untuk beberapa iklan gratis. Sementara apa yang Anda tawarkan mungkin gratis masih tidak ok. Kami menghargai kontribusi Anda kepada komunitas tetapi silakan bawa iklan Anda di tempat lain.
Darth Vader
4
@DarthVader: Karena poster itu memberitahukan bahwa mereka berafiliasi dengan produk, dan itu menjawab pertanyaan, saya cenderung menyebutnya diterima.
Jacobm001