Tidak Dapat Meniru Raspberry Pi menggunakan Qemu: Kernel Panic

15

Saya mencoba mengikuti berbagai panduan di Internet untuk meniru Raspberry Pi pada mesin Fedora 22 saya. Saya telah menemukan pertanyaan ini: Meniru raspbian dengan QEMU dan menggunakannya untuk menemukan kernel-qemu untuk mengambil kernel. Saya mengunduh 2015-09-24-raspbian-jessie.imgdari orang-orang baik di Raspberry Pi.

Ketika saya mencoba untuk menjalankan qemu-system-armsaya mendapatkan panik kernel. Apakah ada sesuatu yang saya lewatkan?

Inilah qemu-system-armbaris perintah yang saya ketikkan:

qemu-system-arm -cpu arm1176 -m 256 -M versatilepb -no-reboot -nographic -kernel kernel-qemu -appc=2 console=ttyAMA0 rw" -hda 2015-09-24-raspbian-jessie.img -net nic -net user,hostfwd=tcp::9999-:22

Diikuti oleh pesan-pesan kernel:

sd 0:0:0:0: [sda] Attached SCSI disk
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <[email protected]>
eth0: SMC91C11xFD (rev 1) at d089a000 IRQ 25 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
mousedev: PS/2 mouse device common for all mice
TCP cubic registered
NET: Registered protocol family 17
input: AT Raw Set 2 keyboard as /devices/fpga:06/serio0/input/input0
input: ImExPS/2 Generic Explorer Mouse as /devices/fpga:07/serio1/input/input1
EXT2-fs (sda2): error: couldn't mount because of unsupported optional features (244)
EXT4-fs (sda2): couldn't mount as ext3 due to feature incompatibilities
EXT4-fs (sda2): recovery complete
EXT4-fs (sda2): mounted filesystem with ordered data mode. Opts: (null)
VFS: Mounted root (ext4 filesystem) on device 8:2.
devtmpfs: mounted
Freeing init memory: 120K
Kernel panic - not syncing: Attempted to kill init!
[<c0032bec>] (unwind_backtrace+0x0/0xf0) from [<c03064dc>] (panic+0x58/0x170)
[<c03064dc>] (panic+0x58/0x170) from [<c0044054>] (do_exit+0x5d0/0x68c)
[<c0044054>] (do_exit+0x5d0/0x68c) from [<c004435c>] (do_group_exit+0x40/0xb0)
[<c004435c>] (do_group_exit+0x40/0xb0) from [<c004ed48>] (get_signal_to_deliver+0x1a8/0x378)
[<c004ed48>] (get_signal_to_deliver+0x1a8/0x378) from [<c002f124>] (do_signal+0x90/0x518)
[<c002f124>] (do_signal+0x90/0x518) from [<c002fa64>] (do_notify_resume+0x48/0x54)
[<c002fa64>] (do_notify_resume+0x48/0x54) from [<c002cc38>] (work_pending+0x24/0x28)
Mike S
sumber
2
Sudahkah Anda mencoba meniru gambar wheezy? Jika kernel berfungsi, itu haruslah jessie.
dhruvvyas90
Oh, ya! Ya ketika kernel tidak cocok dengan img, semuanya rusak! Gambar wheezy berfungsi ... Terima kasih.
Mike S
versi umum howto: raspberrypi.stackexchange.com/questions/165/…
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

Jawaban:

4

Seperti yang dikatakan @dastaan, versi kernel harus cocok dengan file img. Saya mencoba menggunakan file gambar versi kernel 4.1 dengan kernel 3.18.

Sekarang saya menggunakan gambar yang tepat, itu berfungsi.

Terima kasih!

Sunting: Membuat ini berfungsi cukup mudah: Ambil gambar dari https://github.com/dhruvvyas90/qemu-rpi-kernel/ , lalu unduh gambar Raspian yang sesuai yang Anda inginkan di https://www.raspberrypi.org/ unduhan / raspbian / . Saat ini, Jessie dan Wheezy di kedua tempat, tetapi di masa depan tidak ada jaminan bahwa kernel yang sesuai akan tersedia di situs Github. Bagaimanapun, saya sendiri tidak begitu terkesan dengan kecepatannya, jadi saya ingin menempatkan Pi nyata ke port jaringan kabel laptop saya dan menyalakannya melalui baterai tambahan ponsel berkekuatan 5200 mAh, dan menggunakan VNC pada laptop sebagai sebuah tampilan.

Saya tidak membuat Jessie bekerja; itulah masalahnya - saya memiliki kernel Wheezy dan gambar Jessie, tetapi saya tidak memiliki kernel Jessie.

Mike S
sumber
1
Bisakah Anda menambahkan jawaban terperinci bagaimana Anda menyelesaikannya dengan menggunakan kernel terbaru? Ini akan membantu pengguna lain mencoba meniru jessie. Terima kasih.
dhruvvyas90
3
Saya sudah mencoba kernel jessie dan gambar jessie dan mereka gagal dengan kesalahan yang sama. Kernel 4.1 ( github.com/dhruvvyas90/qemu-rpi-kernel/blob/master/… ) dan posting jessie reguler Mei 2015 dari Raspbian.
Michael McGarrah
Jangan tersinggung, tetapi tidak ada yang namanya kernel jessie. Dengan netinstaller raspbian Anda dapat memilih untuk menginstal wheezy atau jessie dan dalam kedua kasus kernel yang sama persis diinstal.
Diederik de Haas
Meskipun benar bahwa kernel diberi nama berdasarkan versi, masalah saya bukanlah bagaimana mengunduh netinstaller raspbian. Masalah saya adalah mencocokkan file gambar dari orang-orang baik di Raspberry Pi dengan versi kernel yang tepat. Di masa depan, saya berharap orang-orang yang menabrak pertanyaan ini akan melihat pesan kesalahan saya dan menyadari apa masalah mereka.
Mike S
@MichaelMcGarrah berhasil setelah membaca wiki dari repo itu: raspberrypi.stackexchange.com/a/53993/33424 Anda harus sedikit mengubah gambar Raspbian.
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
1

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

masukkan deskripsi gambar di sini

Langkah:

  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 dari 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: /ubuntu/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 muncul di terminal host Anda.

Batasan saat ini:

  • -M raspi2ditambahkan dalam 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 menunjukkan tetapi tidak merespons ke mouse / keyboard, diuji pada SDL dan VNC. Namun 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 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 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 memulai di: Cara melakukan emulasi QEMU untuk gambar Raspberry Pi logam kosong

Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
sumber
Metode Anda dengan losetupterlalu rumit. Anda malah bisa hanya menggunakan fdisk -l your-image.img, dan kemudian menggunakan offset untuk partisi di mountoption -o loop,offset=$((512*YOUR_OFFSET)).
Ruslan
-M raspi2 tidak berfungsi
zhaofeng-shu33
0

Sebagian besar panduan sudah usang dan berisi tautan yang rusak. Anda harus menggunakan kernel yang ditambal yang cocok dengan versi raspbian yang Anda gunakan.

Panduan berikut ini berfungsi pada Februari 2017. Ini memiliki skrip yang menangani perubahan gambar raspbian untuk berjalan di QEMU, dan juga berbagi koneksi jaringan Anda dengan raspbian secara otomatis.

https://ownyourbits.com/2017/02/06/raspbian-on-qemu-with-network-access/

nachoparker
sumber
-1

Anda dapat mengunduh kernel khusus saya (4.1.7) untuk Raspbian Jessie di github saya, polaco1782 . Ikuti instruksi pada file dokumen.

Cassiano Martin
sumber
1
Kernel Anda mengirimkan saya ke prompt mode darurat setiap kali saya mencoba meniru. Saya melakukan seperti yang tertulis dalam file read me. (Lihat posting terakhir di -> raspberrypi.org/forums/viewtopic.php?t=112259 ) Dapatkah Anda mengedit jawaban Anda untuk menunjukkan langkah demi langkah apa yang Anda ubah pada gambar jessie dasar untuk membuatnya berfungsi. Ini akan berguna bagi pengguna lain karena sekarang gambar jessie hidup, semakin banyak pengguna akan meniru jessie di qemu. Terima kasih sebelumnya.
dhruvvyas90
Bisakah Anda memperluas jawaban Anda untuk menjelaskan apa yang khusus tentang kernel Anda?
Greenonline
Saya dapat menyelesaikan masalah saya dengan mengomentari fstabentri mmcblk.
dhruvvyas90
@Greenonline Karena qemu tidak mendukung platform Rpi, ada tweak konfigurasi kernel yang diperlukan untuk meniru rpi di Qemu. Anda tidak bisa hanya mengambil kernel Rpi dan membuatnya bekerja di luar kotak.
dhruvvyas90