ฉันดาวน์โหลดรูปภาพ Raspbian ในหน้านี้แล้ว ฉันพยายามรวบรวมเคอร์เนลที่สามารถใช้เพื่อบูตอิมเมจภายใน qemu
ฉันดาวน์โหลด Linux kernel kernel จากkernel.orgและวิ่งไปที่:
make versatile_defconfig
make menuconfig
ฉันเพิ่มคุณสมบัติต่อไปนี้ในเคอร์เนล:
- รองรับ PCI (CONFIG_PCI)
- การสนับสนุนอุปกรณ์ SCSI (CONFIG_SCSI)
- การสนับสนุนดิสก์ SCSI (CONFIG_BLK_DEV_SD)
- SYM53C8XX เวอร์ชัน 2 รองรับ SCSI (CONFIG_SCSI_SYM53C8XX_2)
- ระบบไฟล์ Extended 3 (ext3) (CONFIG_EXT3_FS)
- ระบบไฟล์ Extended 4 (ext4) (CONFIG_EXT4_FS)
ฉันยังวนรอบเมานต์อิมเมจของดิสก์และ:
- แสดงความคิดเห็น
/etc/ld.so.preload
- ปรับ
/etc/fstab
ให้ใช้/dev/sda1
และ/dev/sda2
จากนั้นฉันก็ถอนการติดตั้งภาพและพยายามเริ่มต้นเครื่องด้วย:
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 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
ตอนแรกฉันสงสัยว่าสิ่งนี้ไม่เกี่ยวข้องกับ SELinux หรือไม่ ฉันพยายามบูทเคอร์เนลด้วย:
selinux=0 enforcing=0
... แต่มันก็ไม่ต่างอะไรอย่างแน่นอน
ผมทำอะไรผิดหรือเปล่า? และข้อผิดพลาดนี้หมายความว่าอย่างไร
อัพเดท
ฉันได้ลองทำสิ่งต่อไปนี้โดยไม่มีโชค:
- ฉันพยายามรวบรวมโดยไม่
CONFIG_VFP
เปิดใช้งาน - ฉันเพิ่ม
CONFIG_DEVTMPFS
และCONFIG_DEVTMPFS_MOUNT
- การใช้แพทช์นี้และเปิดใช้งาน
CPU_V6
,CONFIG_MMC_BCM2835
และCONFIG_MMC_BCM2835_DMA
- การใช้
gcc-linaro-arm-linux-gnueabihf-raspbian
toolchain การคอมไพล์โปรแกรม C อย่างง่ายด้วย toolchain จากนั้นผ่านพา ธ ไปยังเคอร์เนลผ่านทาง
init=
งานทำให้ฉันเชื่อว่ามีความแตกต่างระหว่างรูปแบบไบนารี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`
ฉันรวบรวมโปรแกรม C ง่าย ๆ นี้ด้วย toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... และคัดลอกไป/root
ในภาพเปลี่ยนพารามิเตอร์บูตinit=
/root/simple
สิ่งนี้ทำให้ฉันต่อไปนี้เมื่อบูท:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
ดูเหมือนว่าจะสำลักในการexecv()
โทร
cat .config | grep CONFIG_VFP
ให้ผลตอบแทนCONFIG_VFP=y
- ดูเหมือนว่าเปิดใช้งานอยู่
CONFIG_VFP
และทำให้ไม่มีความแตกต่าง
versatilepb
เป็นซีพียู ARM926 ซึ่งเก่ากว่า ARM1176 ของ RPi ดังนั้นไบนารี Raspbian อาจใช้คุณสมบัติอื่นที่ไม่ได้ถูกเลียนแบบ จากunixmen.com/emulating-raspbian-using-qemuไม่-cpu arm1176
ช่วยเหลือ?