6.2. 设计

6.2.1. 确定必要的实用程序

如果我们阅读 grub 信息页,那么无需手动键入参数即可轻松加载内核。 根据标题为“配置”的部分,所有用于启动的命令都可以放在一个名为menu.lst的文件中,并放置在/boot/grub目录下。

Note

请务必正确键入menu.lst文件名,小数点后是小写字母 L,而不是数字 1。

为了自动化系统启动,我们将需要一个 init 守护进程。 我们知道这一点是因为 Bootdisk-HOWTO 和 From-Powerup-To-BASH-Prompt-HOWTO 都提到了 init 作为内核加载后启动的第一个程序。 后面的 HOWTO 还详细介绍了/etc/inittab文件和启动脚本的组织结构。 这可能很有帮助,因为到目前为止我们使用的蓝图 FHS 没有对 init 脚本提出任何建议。

我们还需要找到 shutdown 命令,以实现优雅关闭功能的第二个目标。

6.2.2. 获取源代码

在 Ibiblio 上搜索 Linux 软件地图,关键字为“init”,会得到大量结果。 然而,从阅读 From-Powerup-To-BASH-Prompt-HOWTO 中我们得知,大多数 Linux 系统使用 System V 风格的 init 守护进程。 使用额外的关键词“System V”缩小搜索范围会得到更好的结果。 sysvinit 软件包包含 initshutdownhaltreboot,这正是我们所需要的一切。 LSM 条目中列出的版本看起来相当旧,但是有一个主站点 URL,可能会链接到最新版本。

6.2.3. 检查依赖项

init 的 manpage 提到了一个名为/dev/initctl的 FIFO,这是 init 与 sysvinit 软件包中的其他程序通信所必需的。 我们将必须创建此文件,init 才能正常运行。

6.2.4. 设计一个简单的 GRUB 配置文件。

使用 GRUB 配置文件比手动指定引导加载程序命令稍微复杂一些。 配置文件中需要指定菜单、默认选择和超时等功能的指令,以及熟悉的内核加载命令。 GRUB 的信息页提供了许多必要的信息。 我们或许还可以使用开发系统上的 GRUB 配置文件作为模板。 然而,不同供应商之间对于文件的名称和位置存在一些不一致。 无论开发系统上的路径是什么,它在袖珍 Linux 系统上都应该是/boot/grub/menu.lst

6.2.5. 概述启动脚本

许多流行的 GNU/Linux 发行版都使用 System V 风格的 init 脚本。 由于我们正在使用“sysvinit”守护进程,因此使用 System V 风格的脚本也是有意义的。 以下文档都以某种方式涉及 System V 风格的 init 脚本,并将作为为本项目构建脚本时的参考

在浏览过上述参考文献中的一两篇后,我们应该对 System V 风格的系统初始化过程的工作原理有一个很好的了解。 我们也应该知道为袖珍 Linux 项目创建 System V 风格的 init 脚本需要什么。 以下是需要完成的简要列表

与往常一样,BASH(1) 手册页和高级 BASH 脚本编程指南对于编写和理解 shell 脚本非常有帮助。