"자신만의 운영 체제 작성"의 "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
스크립트를 실행하는 데 사용되는 프로그램을 나타냅니다. 이 경우 비지 박스는 bash를 컴파일하지 않고 대신 bash만 가지고 있었기 /bin/sh
때문에 해결책은 다음을 대체 하는 것이었 bash
습니다 .sh
init
#!/bin/sh