「独自のオペレーティングシステムの作成」の「Busyboxのみを使用して1時間以内に最小Linuxを構築する」チュートリアルを使用して、最小Linuxディストリビューションを作成しようとしています。起動すると、すべてが機能し、次の結果が表示されます。
[ 0.187524] Run /init as init process
[ 0.187624] Failed to execute /init (error -2)
[ 0.187674] Run /sbin/init as init process
[ 0.187707] Run /etc/init as init process
[ 0.187753] Run /bin/init as init process
[ 0.187807] Run /bin/sh as init process
[ 0.187872] Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.
[ 0.187973] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.18.9 #1
[ 0.188032] Call trace:
[ 0.188044] dump_backtrace.part.0+0xcc/0xe0
[ 0.188103] show_stack+0x18/0x6c
[ 0.188117] dump_stack_lvl+0x68/0x84
[ 0.188167] dump_stack+0x18/0x34
[ 0.188195] panic+0x168/0x328
[ 0.188215] kernel_init+0x12c/0x13c
[ 0.188262] ret_from_fork+0x10/0x20
[ 0.188279] SMP: stopping secondary CPUs
[ 0.188340] Kernel Offset: disabled
[ 0.188363] CPU features: 0x000,0000140a,59a49dc8
[ 0.188409] Memory Limit: none
[ 0.188426] ---[ end Kernel panic - not syncing: No working init found. Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance. ]---
初期化ファイル:
#!/bin/sh
mount -t sysfs sysfs /sys
mount -t proc proc /proc
mount -t devtmpfs udev /dev
sysctl -w kernel.printk="2 4 1 7"
/bin/sh
答え1
- カーネルがスクリプトを実行できるようにBINFMT_SCRIPTを設定すると、実際にはバイナリではなくINITを実行できます。その後、カーネルはバイナリELF(たとえば/ bin / sh)の実行を許可する必要があるため、「Error 2」の代わりに「Error 8」と表示されます。
- BINFMT_ELFも設定する必要があります。
答え2
このエラーが発生した次の人へ:私も同じ問題があることを確認し、BINFMT_SCRIPT
オプションBINFMT_ELF
をに設定しましたが、y
まだこのエラーが発生しました。
init
ファイルの最初の行は、#!/bin/bash
スクリプトの実行に使用されるプログラムを表します。この場合、BusinessBoxはbashをコンパイルせず、代わりにbashだけを持っていた/bin/sh
ので、解決策は次のものを置き換えることでしたbash
。sh
init
#!/bin/sh