Linux 커널 초기화, /bin/sh가 존재하지만 실행할 수 없습니다(오류 -8).

Linux 커널 초기화, /bin/sh가 존재하지만 실행할 수 없습니다(오류 -8).

버그: Linux 커널이 부팅되고 initramfs/CPIO 이미지가 로드되지만 init 프로세스가 오류 -8(NOEXEC)로 인해 실패합니다.

[    3.499638] Run /init as init process
[    3.506228] Failed to execute /init (error -8)
[    3.510820] Run /sbin/init as init process
[    3.517222] Run /etc/init as init process
[    3.523164] Run /bin/init as init process
[    3.530061] Run /bin/sh as init process
[    3.536048] Starting init: /bin/sh exists but couldn't execute it (error -8)
[    3.543643] Kernel panic - not syncing: No working init found.  Try passing init= option to kernel. See Linux Documentation/admin-guide/init.rst for guidance.

사용된 하드웨어 및 소프트웨어:

  • STM32F429-탐색 보드
  • 사용자 정의 커널 및 장치 트리 구성
  • 처음부터 사용자 정의 빌드 스크립트(buildroot 없음, yocto 없음, uclinux 없음)
  • 정적으로 연결된 비지박스 사용

내가 시도한 것:

  • 외부에서 CPIO 이미지를 빌드하는 대신 rootfs/ 디렉토리를 지정 INITRAMFS_SOURCE=../rootfs/하고 Linux makefile이 initramfs 자체를 빌드하도록 했습니다. 또한 spec.txt를 사용해 보았습니다(아래 cat spec.txt).
  • "noexec=off" 매개변수로 시작하세요~rdinit=/bin/sh console=ttySTM0,115200n8 earlyprintk noexec=off
  • busybox ELF 실행 파일의 아키텍처가 올바른지, 정적으로 링크되어 있는지 확인하세요.
$ readelf -A rootfs/bin/busybox 
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-M"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Microcontroller
  Tag_ARM_ISA_use: Yes
  Tag_THUMB_ISA_use: Thumb-2
  Tag_ABI_PCS_wchar_t: 4
  Tag_ABI_FP_rounding: Needed
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_align_preserved: 8-byte, except leaf SP
  Tag_ABI_enum_size: int
  Tag_CPU_unaligned_access: v6

$ readelf -A linux/vmlinux
Attribute Section: aeabi
File Attributes
  Tag_CPU_name: "7-M"
  Tag_CPU_arch: v7
  Tag_CPU_arch_profile: Microcontroller
  Tag_THUMB_ISA_use: Thumb-2
  Tag_FP_arch: VFPv2
  Tag_ABI_PCS_wchar_t: 2
  Tag_ABI_FP_denormal: Needed
  Tag_ABI_FP_exceptions: Needed
  Tag_ABI_FP_number_model: IEEE 754
  Tag_ABI_align_needed: 8-byte
  Tag_ABI_enum_size: int

$ cat spec.txt 
dir /dev 755 0 0
nod /dev/console 644 0 0 c 5 1
dir /bin 755 1000 1000
slink /bin/sh busybox 777 0 0
slink /bin/mknod busybox 777 0 0
file /bin/busybox ../rootfs/bin/busybox 755 0 0
dir /proc 755 0 0
dir /sys 755 0 0
dir /mnt 755 0 0
file /init ../rootfs/init 755 0 0```

커널 전체 부팅 로그: https://pastebin.com/raw/kG78ksKJ

커널.config: https://pastebin.com/raw/2Dk4w99h

busybox.config: https://pastebin.com/raw/KzuFdKFr

관련 정보