我有一个带有处理器AT91SAM9G45的嵌入式ARM系统。
该系统由两个部分组成:
我使用putty连接到设备,并连接到串口。
当内核启动时,一切都很好。内核解包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不能写入stdout,因为它被阻塞、挂起、被其他进程使用等等)。
如何确定,/etc/inittab已经启动?
发布于 2019-01-23 11:26:26
欢迎来到StackOverflow。我看到rc和S si::sysinit:/etc/init.d/rc S之间有空位
将其更改为
si::sysinit:/etc/init.d/rcS
如果有用的话请告诉我。
发布于 2019-01-25 01:24:22
/init是指向/bin/busybox的符号链接。
集成Busybox的Buildroot构建的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 $*请注意注释(“initramfs不自动生成devtmpfs”)和用于/dev的挂载命令。
链接到/bin/busybox.的是/sbin/init (而不是/init)。
如果没有正确设置/dev目录,userland就没有I/O能力。
只有在devtmpfs被挂载后,才能执行init程序在Busybox中,然后访问
请参阅有办法让Linux将initramfs作为最终的根文件系统处理吗?
和
https://stackoverflow.com/questions/54320960
复制相似问题