我正在创建一个 linux 发行版,现在我需要一个 init 程序。我可以很好地用 c 编写代码,而且我对 linux 了解很多(虽然不多,但我已经使用 arch linux 进行了 4 年的开发),所以我想我应该尝试用 C 编写我自己的基本初始化脚本。我是只是想知道,init 做了什么任务来为一个简单的 shell 设置系统?(当我问“init 有什么作用?”时,我确实知道 init 是什么以及它的用途。我只是不知道它做了什么任务。)
我不需要代码,我什至可能不需要基本命令,但我确实需要它们运行的顺序。
我有一个最小的 Linux 系统。
INIT是/bin/bash
,只有最低限度以库/lib/
,/dev/
静态填充,没有运行的守护进程(无udev的,..)
当 bash 启动时,我收到以下错误:
bash: cannot set terminal process group (-1) inappropriate ioctl for device
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)
当我用 strace 启动 bash 时,我得到以下输出:
rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0
open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address)
ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, {B38400 opost isig icanon echo ...}) = 0
....
readlink("/proc/self/fd/0", "/dev/console"..., 4095) = 12
stat("/dev/console", {st_mode=S_IFCHR|0600, st_rdev=makedev(5, 1), ...}) = 0
open("/dev/console", O_RDWR|O_NONBLOCK) = …
Run Code Online (Sandbox Code Playgroud) 我试图在基于 runit 的 linux 系统中运行 agetty,但我有以下问题
sh: cannot set terminal process group (136) Inappropriate ioctl for device
sh: no job control in this shell
Run Code Online (Sandbox Code Playgroud)
我对这个错误一无所知,你有什么想法吗
运行 agetty 的脚本是
#!/bin/sh
exec /sbin/agetty 38400 tty1 linux --noclear
Run Code Online (Sandbox Code Playgroud)
任何帮助都会很好。