我有一个带有处理器 AT91SAM9G45 的嵌入式 ARM 系统。
系统由两部分组成:
- Linux 内核 (4.14.79)
- Busybox 1.29.3 作为 initramfs 映像。
我使用腻子连接到设备并连接到串行端口。
当内核启动时,一切正常。内核解压缩 initramfs 映像,找到并列出所有文件(我通过调试消息看到它)。但是当它启动 /init 时,日志消息是:
Freeing unused kernel memory: 384K
This architecture does not have kernel memory protection.
run_init_process BEFORE /init
run_init_process AFTER /init, result = 0
Kernel panic - not syncing: Attempted to kill init! exitcode=0x00000004
/init 是 /bin/busybox 的符号链接。我尝试将 /init 替换为 /sbin/init、/bin/busybox、/linuxrc,但结果是一样的。
/etc/inittab 文件:
# Begin /etc/inittab
id::initdefault:
si::sysinit:/etc/init.d/rc S
#l0::wait:/etc/rc.d/init.d/rc 0
#l1::wait:/etc/rc.d/init.d/rc 1
#l2::wait:/etc/rc.d/init.d/rc 2
#l3::wait:/etc/rc.d/init.d/rc 3
#l4::wait:/etc/rc.d/init.d/rc 4
#l5::wait:/etc/rc.d/init.d/rc 5
#l6::wait:/etc/rc.d/init.d/rc 6
ca::ctrlaltdel:/sbin/shutdown -t1 -a -r now
su::once:/sbin/sulogin
1::respawn:/sbin/getty ttyS1 115200
2::respawn:/sbin/getty ttyS2 115200
3::respawn:/sbin/getty ttyS3 115200
4::respawn:/sbin/getty ttyS4 115200
5::respawn:/sbin/getty ttyS5 115200
6::respawn:/sbin/getty ttyS6 115200
# End /etc/inittab
/etc/init.d/rcS 文件(该文件允许执行):
#!/bin/busybox sh
echo "Hello world!"
我不知道 /init 进程是否开始解析 /etc/inittab 或者它在获取 /etc/inittab 之前由于某些我无法找到的原因而下降。也许我的 /etc/inittab 和 /etc/init.d/rcS 文件中有一些错误。也许终端有一些错误(/etc/init.d/rcS 无法写入标准输出,因为它被阻塞、挂起、被另一个进程使用等等)。
如何确定 /etc/inittab 已启动?