Saya telah mengunduh gambar Raspbian di halaman ini . Saya mencoba mengkompilasi kernel yang dapat digunakan untuk mem-boot image di dalam qemu.
Saya mengunduh sumber kernel Linux dari kernel.org dan berlari:
make versatile_defconfig
make menuconfig
Saya kemudian menambahkan fitur-fitur berikut ke kernel:
- Dukungan PCI (CONFIG_PCI)
- Dukungan Perangkat SCSI (CONFIG_SCSI)
- Dukungan Disk SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX Versi 2 Dukungan SCSI (CONFIG_SCSI_SYM53C8XX_2)
- Sistem file Extended 3 (ext3) (CONFIG_EXT3_FS)
- Sistem file Extended 4 (ext4) (CONFIG_EXT4_FS)
Saya juga mengulang mount image disk dan:
- berkomentar
/etc/ld.so.preload
- disesuaikan
/etc/fstab
untuk digunakan/dev/sda1
dan/dev/sda2
Saya kemudian melepas gambar dan mencoba memulai mesin dengan:
qemu-system-arm \
-M versatilepb \
-m 256 \
-kernel linux-4.3/arch/arm/boot/zImage \
-hda 2015-09-24-raspbian-jessie.img \
-serial stdio \
-append "root=/dev/sda2 rootfstype=ext4 rw console=ttyAMA0"
Kernel dapat memasang sistem file tetapi segera mengalami beberapa masalah:
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
CPU: 0 PID: 1 Comm: init Not tainted 4.3.0 #1
Hardware name: ARM-Versatile PB
[<c001b5c0>] (unwind_backtrace) from [<c0017e18>] (show_stack+0x10/0x14)
[<c0017e18>] (show_stack) from [<c0069860>] (panic+0x84/0x1ec)
[<c0069860>] (panic) from [<c0025b98>] (do_exit+0x81c/0x850)
[<c0025b98>] (do_exit) from [<c0025c5c>] (do_group_exit+0x3c/0xb8)
[<c0025c5c>] (do_group_exit) from [<c002dfcc>] (get_signal+0x14c/0x59c)
[<c002dfcc>] (get_signal) from [<c001bf28>] (do_signal+0x84/0x3a0)
[<c001bf28>] (do_signal) from [<c0017a94>] (do_work_pending+0xb8/0xc8)
[<c0017a94>] (do_work_pending) from [<c0014f30>] (slow_work_pending+0xc/0x20)
---[ end Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Pada awalnya, saya bertanya-tanya apakah ini tidak ada hubungannya dengan SELinux. Saya mencoba mem-boot kernel dengan:
selinux=0 enforcing=0
... tapi sama sekali tidak ada bedanya.
Apa yang saya lakukan salah? Dan apa artinya kesalahan ini?
Pembaruan
Saya juga sudah mencoba yang berikut ini, tanpa hasil:
- Saya mencoba mengompilasi dengan dan tanpa
CONFIG_VFP
mengaktifkan - Saya menambahkan
CONFIG_DEVTMPFS
danCONFIG_DEVTMPFS_MOUNT
- Menerapkan patch ini dan memungkinkan
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Menggunakan
gcc-linaro-arm-linux-gnueabihf-raspbian
toolchain Mengkompilasi program C sederhana dengan toolchain dan kemudian meneruskannya ke kernel melalui
init=
karya - membuat saya percaya ada perbedaan antara format binerfile <sample program>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 2.6.26, BuildID[sha1]=e5ec8884499c51b248df60aedddfc9acf72cdbd4, not stripped
file <file from the image>
:ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=3e92423821f3325f8cb0ec5d918a7a1c76bbd72c, stripped`
Saya menyusun program C sederhana ini dengan toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... dan menyalinnya ke /root
dalam gambar, mengubah init=
parameter boot menjadi /root/simple
. Ini memberi saya yang berikut saat boot:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Tampaknya tersedak execv()
panggilan.
sumber
cat .config | grep CONFIG_VFP
menghasilkanCONFIG_VFP=y
- sepertinya diaktifkan.CONFIG_VFP
dan tidak ada bedanya.versatilepb
adalah CPU ARM926, yang lebih tua dari ARM1176 RPi, jadi binari Raspbian mungkin menggunakan beberapa fitur lain yang tidak ditiru. Dari unixmen.com/emulating-raspbian-using-qemu , apakah-cpu arm1176
membantu?Jawaban:
Saya juga mencoba mem-boot gambar ARM dengan QEMU tanpa keberhasilan yang dapat diandalkan. Saya menyesal mengatakan bahwa Anda harus menggunakan perangkat keras nyata untuk bekerja dengan OS ARM, atau menunggu dengan sabar bagi pengembang untuk membuat emulator yang lebih andal untuk ARM.
Ini 2018 Desember, dan masih ada masalah dengan
qemu-system-arm
.Saya dapat mem-boot Raspbian Jessie pada emulator QEMU menggunakan Ubuntu 18 Bionic yang baru diinstal, namun itu tidak stabil untuk pekerjaan saya jadi saya harus meninggalkannya untuk perangkat keras nyata. Itu akan sering membeku.
qemu-system-arm
tidak berfungsi pada OS saya, jadi saya menggunakan Virtualbox untuk menginstal Ubuntu Bionic dan di dalam Bionic saya menginstal Raspbian dengan QEMU.Saya mengikuti tutorial ini: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
Semoga berhasil
sumber
Saya tahu ini pertanyaan yang agak lama, tetapi karena masih ada belum ada jawaban yang baik untuk menguji gambar Raspberry Pi dengan QEMU, izinkan saya berkontribusi sebagian jawaban.
Saya ingin menggunakan Ubuntu 16.04 raspi3 image dengan QEMU. Unduh, ekstrak, pasang partisi boot, dapatkan file vmlinuz dan file initrd, dan ... qemu-system-arm -M blabla -cpu ... -kernel ... tidak berfungsi. Layar hitam.
Kemudian menggunakan kernel-qemu-4.4.34-jessie dari sini dengan image xenial / rootfs menyebabkan masalah "init kill" yang sama dengan yang Anda miliki.
Tetapi karena saya menggunakan kernel yang dikenal baik, dan karena program C sederhana yang terhubung secara statis berfungsi, kemungkinan masalahnya hanya muncul ketika seseorang menggunakan tautan dinamis. (Dan linker tidak terlalu sensitif terhadap kernel, karena ld-2.24 dari raspbian berbasis debian9 (stretch) terbaru bekerja dengan baik pada kernel berbasis 4.4 debian8 (jessie).)
Bahkan setelah menyalin file yang berfungsi pada / dengan gambar "jessie" ke dalam gambar xenial ubuntu saya hanya mendapat kesalahan "panggil preinit: KE" yang aneh.
Oh, dan siapa pun yang melihat kompilasi kernel untuk Raspberry Pi, harus memeriksa situs ini , yang secara langsung merujuk pada dokumen " resmi " / howto.
sumber
Kernel linux tidak menjalankan init lagi melainkan menjalankan systemd yang seperti init tetapi fitur yang sedikit lebih maju dan kemampuan multitasking ekstra, meskipun terhadap unix filosofi systemd berguna.
sumber