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.img
dari orang-orang baik di Raspberry Pi.
Ketika saya mencoba untuk menjalankan qemu-system-arm
saya mendapatkan panik kernel. Apakah ada sesuatu yang saya lewatkan?
Inilah qemu-system-arm
baris 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)
Jawaban:
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.
sumber
Silakan melihat-lihat kernel diaktifkan qemu saya: https://github.com/diederikdehaas/raspbian-kernel
Dalam pesan komit Anda dapat menemukan deskripsi rinci tentang apa dan bagaimana hal-hal berubah.
Sebagian besar didasarkan pada artikel ini: https://web.archive.org/web/20131210001638/http://xecdesign.com/compiling-a-kernel/
sumber
Ubuntu 16.04, QEMU 2.9.0 -M raspi2, Raspbian 2016-05-27, vanilla kernel
Langkah:
Kompilasi QEMU 2.9.0 dari sumber:
Unduh gambar dan ekstrak kernel dan dts dari itu:
Unduh gambar dan unzip:
Pasang gambar kedua dari partisi. Cara termudah adalah:
Ini hanya bekerja dengan yang terbaru
losetup
di Ubuntu 16.04, metode lain di: /ubuntu/69363/mount-single-partition-from-image-of-entire-disk-device/496576#496576Ini mencetak perangkat loop, misalnya:
jadi kami lakukan:
Lari:
Anda kemudian dapat login di terminal yang muncul di terminal host Anda.
Batasan saat ini:
-M raspi2
ditambahkan 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.Ubuntu 16.04, QEMU 2.5.0, Raspbian 2016-05-27, kernel yang dimodifikasi
Metode ini menggunakan
-M versatilepb
yang 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.
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 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?
Ubah gambar Raspbian sebagaimana disebutkan di: https://github.com/dhruvvyas90/qemu-rpi-kernel/wiki/Emulating-Jessie-image-with-4.x.xx-kernel/0068f0c21d942b0f331e18014ff8e22c20cada5c
Ringkasan:
Pasang gambar seperti yang kami lakukan untuk
-M raspi2
, tetapi gunakan partisi kedua, bukan yang pertama:Edit gambar:
Lari:
[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:Ini menunjukkan bahwa
-M raspi2
masih 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:
bztsrc/raspi3-tutorial
RPI3 bare metal di QEMUhttps://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
sumber
losetup
terlalu rumit. Anda malah bisa hanya menggunakanfdisk -l your-image.img
, dan kemudian menggunakan offset untuk partisi dimount
option-o loop,offset=$((512*YOUR_OFFSET))
.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/
sumber
Anda dapat mengunduh kernel khusus saya (4.1.7) untuk Raspbian Jessie di github saya, polaco1782 . Ikuti instruksi pada file dokumen.
sumber
fstab
entri mmcblk.