Linux 커널 부팅: /init를 실행할 수 없습니다(오류 -2).

Linux 커널 부팅: /init를 실행할 수 없습니다(오류 -2).

"자신만의 운영 체제 작성"의 "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

  1. 커널이 스크립트를 실행할 수 있도록 BINFMT_SCRIPT를 설정하면 실제로 여러분과 같은 바이너리가 아닌 INIT를 실행할 수 있습니다. 이후 커널은 바이너리 ELF(예: /bin/sh) 실행을 허용해야 하기 때문에 "Error 2" 대신 "Error 8"을 표시합니다.
  2. 이제 BINFMT_ELF도 설정해야 합니다.

답변2

이 오류가 발생한 다음 사람에게: 저도 같은 문제가 있어서 확인했고 BINFMT_SCRIPT옵션 BINFMT_ELF을 으로 설정했지만 y여전히 이 오류가 발생했습니다.

init파일의 첫 번째 줄은 #!/bin/bash스크립트를 실행하는 데 사용되는 프로그램을 나타냅니다. 이 경우 비지 박스는 bash를 컴파일하지 않고 대신 bash만 가지고 있었기 /bin/sh때문에 해결책은 다음을 대체 하는 것이었 bash습니다 .shinit

#!/bin/sh

관련 정보