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 menjalankan:
make versatile_defconfig
make menuconfig
Saya kemudian menambahkan 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 memasang ulang gambar disk dan:
- mengomentari
/etc/ld.so.preload
- disesuaikan
/etc/fstab
untuk menggunakan/dev/sda1
dan/dev/sda2
Saya kemudian melepas gambar dan mencoba menyalakan 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 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 terkait 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 arti kesalahan ini?
Pembaruan
Saya juga telah mencoba yang berikut ini, tetapi tidak berhasil:
- Saya mencoba mengkompilasi dengan dan tanpa
CONFIG_VFP
diaktifkan - Saya menambahkan
CONFIG_DEVTMPFS
danCONFIG_DEVTMPFS_MOUNT
- Menerapkan patch ini dan mengaktifkan
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Menggunakan
gcc-linaro-arm-linux-gnueabihf-raspbian
rantai alat -
Mengkompilasi program C sederhana dengan rantai alat dan kemudian meneruskan jalurnya ke kernel melalui
init=
berhasil – membuat saya percaya bahwa ada perbedaan antara format biner-
file <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`
-
perbedaan header ELF
-
Saya mengkompilasi program C sederhana ini dengan toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
…dan menyalinnya ke /root
pada gambar, mengubah init=
parameter boot ke /root/simple
. Ini memberi saya yang berikut ini saat boot:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Tampaknya tersedak pada execv()
panggilan.
Jawaban yang Diterima:
Saya juga mencoba mem-boot gambar ARM dengan QEMU tanpa hasil yang dapat diandalkan. Saya minta maaf untuk mengatakan bahwa Anda harus menggunakan perangkat keras asli untuk bekerja dengan OS ARM, atau menunggu dengan sabar hingga pengembang membuat emulator yang lebih andal untuk ARM.
Terkait:Cari file yang nama jalurnya berisi beberapa kata tanpa urutan khusus di antara mereka?
Ini Desember 2018, 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 yang sebenarnya. Itu akan sering membeku.
qemu-system-arm
tidak bekerja 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