Raspbianイメージを このページ にダウンロードしました。 qemu内でイメージを起動するために使用できるカーネルをコンパイルしようとしています。
Linuxカーネルソースを kernel.org からダウンロードして実行しました。
_make versatile_defconfig
make menuconfig
_
次に、カーネルに次の機能を追加しました。
また、ディスクイメージをループマウントして、
/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()
呼び出しが窒息しているようです。
ARM QEMUを使用したイメージの起動も試みましたが、信頼できる成功はありませんでした。ARMを使用するには、実際のハードウェアを使用する必要があります= OS、または開発者がARM向けのより信頼性の高いエミュレータを作成するまで辛抱強く待ちます。
2018年12月、まだqemu-system-arm
。
新しくインストールしたUbuntu 18 Bionicを使用して、QEMUエミュレーターでRaspbian Jessieを起動できましたが、動作が安定していなかったため、実際のハードウェアに残したままにしました。それは頻繁にフリーズします。
qemu-system-arm
は私のOSでは動作しなかったので、Virtualboxを使用してUbuntu Bionicをインストールし、Bionicの内部にRaspbianをQEMUとともにインストールしました。
私はこのチュートリアルに従いました: https://azeria-labs.com/emulate-raspberry-pi-with-qemu/
幸運を
少し古い質問であることはわかっていますが、まだQEMUでRaspberry Piイメージをテストするための良い答えはないので、部分的な答えを提供することができます。
buntu 16.04 raspi3 image をQEMUで使用したかった。それをダウンロードし、抽出し、ブートパーティションをマウントし、vmlinuzファイルとinitrdファイルを取得しました... qemu-system-arm -M blabla -cpu ... -kernel ...が機能しません。黒い画面。
次に、xenial image/rootfsで here のkernel-qemu-4.4.34-jessieを使用すると、同じ「init killed」問題が発生しました。
しかし、私は既知の優れたカーネルを使用しているため、静的にリンクされた単純なCプログラムが機能するため、動的リンカーを使用したときにのみ問題が表面化する可能性があります。 (また、最新のdebian9(ストレッチ)ベースのraspbianのld-2.24が4.4 debian8(jessie)ベースのカーネルで正常に動作するため、リンカーはカーネルに特に敏感ではありません。
「jessie」イメージ上で動作するファイルをUbuntuのxenialイメージにコピーした後でも、奇妙な「calling preinit:KE」エラーが発生しました。
おお、そしてRaspberry Piのカーネルのコンパイルを検討している人は、「 official "docs/howtoを直接参照する this サイトを確認する必要があります。
Linuxカーネルは、代わりにinitを実行しません。代わりに、initのようなsystemdを実行しますが、UNIXの哲学systemdに対しては有用ですが、もう少し高度な機能と追加のマルチタスク機能を備えています。