我正在开发一个嵌入式Linux系统,它使用busybox作为init。
系统启动时,有两条错误日志如下:
[ 3.901185] Run /linuxrc as init process
[ 3.909861] process '/bin/busybox' started with executable stack
mount: mounting devpts on /dev/pts failed: No such file or directory
mount: mounting tmpfs on /dev/shm failed: No such file or directory
当我登录到 Linux 并运行“mount”命令后,我得到了以下信息,
# mount
......
devtmpfs on /dev type devtmpfs (rw,relatime,size=41768k,nr_inodes=10442,mode=755)
proc on /proc type proc (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
tmpfs on /run type tmpfs (rw,nosuid,nodev,relatime,mode=755)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600,ptmxmode=000) <<<<
tmpfs on /dev/shm type tmpfs (rw,relatime) <<<<
令我惊讶的是,它们已经安装在那里了!
busybox使用的/etc/fstab如下,
# cat /etc/fstab
# <file system> <mount pt> <type> <options> <dump> <pass>
/dev/root / ext2 rw,noauto 0 1
proc /proc proc defaults 0 0
devpts /dev/pts devpts defaults,gid=5,mode=620,ptmxmode=0666 0 0
tmpfs /dev/shm tmpfs mode=0777 0 0
tmpfs /tmp tmpfs mode=1777 0 0
tmpfs /run tmpfs mode=0755,nosuid,nodev 0 0
sysfs /sys sysfs defaults 0 0
我认为 /dev/pts 和 /dev/shm 出现在系统中可能会有一些延迟,所以我在 busybox 的 mount.c 中添加了延迟,但得到了相同的结果错误!
我还尝试通过将这两行移动到文件末尾来编辑 /etc/fstab,但得到了相同的结果错误!
然后我将内核命令行更改为“init=/bin/bash”,以便在启动时转到 bash。
在 bash 中,我检查了 /dev/pts 和 /dev/shm,它们不在那里!
我尝试手动安装它们,但仍然遇到“没有这样的文件或目录”的错误。
我不知道为什么会发生这种情况,它看起来无害,但在系统中看到“错误消息”很烦人,所以我想弄清楚并修复它。
答案1
通过 Artem 建议的测试,我找到了错误的根本原因以及如何修复它。
当busybox作为系统中的init进程启动时,它首先/etc/fstab
根据文件检查并尝试挂载文件系统。确实没有/dev/shm
或/dev/pts
当时可以通过 Busybox 进行安装,因此 Busybox 对此有所抱怨。
然后/etc/init.d/rcS
,它还会挂载一些文件系统,包括/dev/shm
和/dev/pts
。并rcS
首先在挂载文件系统之前mkdir /dev/pts
。/dev/shm
这就是为什么没有报告错误,这就是为什么它们甚至被注释掉了/etc/fstab
。
所以现在我将继续使用rcS
他们的坐骑并在 中注释掉它们/etc/fstab
。