このページで 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プログラムをコンパイルしてから、そのパスをWorks経由でカーネルに渡す
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
助けてくれますか?