0

我有一个带有处理器 AT91SAM9G45 的嵌入式 ARM 系统。

系统由两部分组成:

  1. Linux 内核 (4.14.79)
  2. 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 已启动?

4

2 回答 2

0

欢迎来到 StackOverflow。我看到 rc 和 S 之间有空格 si::sysinit:/etc/init.d/rc S

将其更改为

si::sysinit:/etc/init.d/rcS

让我知道它是否有效。

于 2019-01-23T11:26:26.127 回答
0

/init 是 /bin/busybox 的符号链接。

由 Buildroot 构建的包含 Busybox 的 initramfs 中的典型/init文件是一个七行脚本:

#!/bin/sh
# devtmpfs does not get automounted for initramfs
/bin/mount -t devtmpfs devtmpfs /dev
exec 0</dev/console
exec 1>/dev/console
exec 2>/dev/console
exec /sbin/init $*

请注意注释(“devtmpfs 不会为 initramfs 自动挂载”)和/dev的挂载命令。

链接到/bin/busybox的是/sbin/init(而不是/init ) 。

IOW 如果没有正确设置/dev目录,用户空间就没有 I/O 能力。
只有在安装了 devtmpfs 之后,才执行Busybox中的init程序,然后该程序将访问/etc/inittab

请参阅有没有办法让 Linux 将 initramfs 视为最终的根文件系统?
并使
CONFIG_DEVTMPFS_MOUNT 应用于 initramfs/initmpfs

于 2019-01-25T01:24:22.230 回答