Tôi đã tải xuống hình ảnh Raspbian trên trang này . Tôi đang cố gắng biên dịch một kernel có thể được sử dụng để khởi động hình ảnh trong qemu.
Tôi đã tải xuống nguồn kernel Linux từ kernel.org và chạy:
make versatile_defconfig
make menuconfig
Sau đó tôi đã thêm các tính năng sau vào kernel:
- Hỗ trợ PCI (CONFIG_PCI)
- Hỗ trợ thiết bị SCSI (CONFIG_SCSI)
- Hỗ trợ đĩa SCSI (CONFIG_BLK_DEV_SD)
- Hỗ trợ SCSI phiên bản 2 của SYM53C8XX (CONFIG_SCSI_SYM53C8XX_2)
- Hệ thống tập tin mở rộng 3 (ext3) (CONFIG_EXT3_FS)
- Hệ thống tập tin mở rộng 4 (ext4) (CONFIG_EXT4_FS)
Tôi cũng lặp gắn hình ảnh đĩa và:
- Bình luận
/etc/ld.so.preload
- điều chỉnh
/etc/fstab
để sử dụng/dev/sda1
và/dev/sda2
Sau đó, tôi đã ngắt kết nối hình ảnh và cố gắng khởi động máy bằng:
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"
Nhân đã có thể gắn kết hệ thống tập tin nhưng nó ngay lập tức gặp một số rắc rối:
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
Lúc đầu, tôi tự hỏi liệu điều này không liên quan đến SELinux. Tôi đã thử khởi động kernel bằng:
selinux=0 enforcing=0
... nhưng nó hoàn toàn không có gì khác biệt.
Tôi đang làm gì sai? Và lỗi này có nghĩa là gì?
Cập nhật
Tôi cũng đã thử những điều sau đây, không có may mắn:
- Tôi đã thử biên dịch có và không
CONFIG_VFP
kích hoạt - Tôi đã thêm
CONFIG_DEVTMPFS
vàCONFIG_DEVTMPFS_MOUNT
- Áp dụng bản vá này và cho phép
CPU_V6
,CONFIG_MMC_BCM2835
, &CONFIG_MMC_BCM2835_DMA
- Sử dụng
gcc-linaro-arm-linux-gnueabihf-raspbian
chuỗi công cụ Biên dịch một chương trình C đơn giản với chuỗi công cụ và sau đó chuyển đường dẫn của nó tới kernel thông qua
init=
các tác phẩm - khiến tôi tin rằng có sự khác biệt giữa các định dạng nhị phânfile <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`
Tôi đã biên dịch chương trình C đơn giản này với toolchain:
<path>/arm-linux-gnueabihf-gcc --static simple.c -o simple
... và sao chép nó vào /root
trong ảnh, thay đổi init=
tham số khởi động thành /root/simple
. Điều này cho tôi những điều sau đây khi khởi động:
Starting bash...
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
Nó dường như bị nghẹn trong execv()
cuộc gọi.
cat .config | grep CONFIG_VFP
Sản lượng @AlexandreBelloni CONFIG_VFP=y
- có vẻ như nó được kích hoạt.
CONFIG_VFP
và nó không có gì khác biệt.
versatilepb
là CPU ARM926, cũ hơn ARM1176 của RPi, vì vậy các nhị phân Raspbian có thể đang sử dụng một số tính năng khác không được mô phỏng. Từ unixmen.com/emulation-raspbian-USE-qemu , có -cpu arm1176
giúp được gì không?