이 페이지 에서 Raspbian 이미지를 다운로드했습니다 . qemu 내에서 이미지를 부팅하는 데 사용할 수있는 커널을 컴파일하려고합니다.
kernel.org 에서 Linux 커널 소스를 다운로드하여 실행했습니다.
make versatile_defconfig
make menuconfig
그런 다음 커널에 다음 기능을 추가했습니다.
- PCI 지원 (CONFIG_PCI)
- SCSI 장치 지원 (CONFIG_SCSI)
- SCSI 디스크 지원 (CONFIG_BLK_DEV_SD)
- SYM53C8XX 버전 2 SCSI 지원 (CONFIG_SCSI_SYM53C8XX_2)
- 확장 3 (ext3) 파일 시스템 (CONFIG_EXT3_FS)
- 확장 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
툴체인을 사용하여 간단한 C 프로그램을 컴파일 한 다음
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 프로그램 을 툴체인으로 컴파일 했습니다 .
<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 CPU는 RPi의 ARM1176보다 오래되었으므로 Raspbian 바이너리는 에뮬레이션되지 않는 다른 기능을 사용 중일 수 있습니다. 에서 unixmen.com/emulating-raspbian-using-qemu , 수행 -cpu arm1176
에 도움을?