8.2. 启动过程详解

当 PC 启动时,BIOS 将进行各种测试以检查一切是否正常,然后开始实际启动。此过程称为 power on self test,或简称 POST(加电自检)。它将选择一个磁盘驱动器(通常是第一个软盘驱动器,如果插入了软盘;否则是第一个硬盘,如果计算机中安装了硬盘;顺序可能是可配置的),然后读取它的第一个扇区。这称为引导扇区;对于硬盘,它也称为 主引导记录,因为硬盘可以包含多个分区,每个分区都有自己的引导扇区。

引导扇区包含一个小程序(足够小以放入一个扇区),其职责是从磁盘读取实际的操作系统并启动它。当从软盘启动 Linux 时,引导扇区包含的代码只需将前几百个块(当然,取决于实际的内核大小)读取到内存中的预定位置。在 Linux 启动软盘上,没有文件系统,内核只是存储在连续的扇区中,因为这简化了启动过程。但是,也可以通过使用 LILO(LInux LOader,Linux 加载器)或 GRUB(GRand Unifying Bootloader,GRand 统一引导加载器)从带有文件系统的软盘启动。

当从硬盘启动时,主引导记录中的代码将检查分区表(也在主引导记录中),识别活动分区(标记为可启动的分区),从该分区读取引导扇区,然后启动该引导扇区中的代码。分区引导扇区中的代码执行软盘引导扇区所做的操作:它将从分区中读取内核并启动它。但是,细节有所不同,因为为内核镜像单独设置一个分区通常没有用,因此分区引导扇区中的代码不能只是按顺序读取磁盘,它必须找到文件系统放置扇区的位置。有几种方法可以解决这个问题,但最常见的方法是使用像 LILO 或 GRUB 这样的引导加载器。(关于如何执行此操作的细节与本文的讨论无关;有关更多信息,请参阅 LILO 或 GRUB 文档;它最详尽。)

启动时,引导加载器通常会直接读取并启动默认内核。也可以配置引导加载器以能够启动多个内核之一,甚至启动 Linux 以外的其他操作系统,并且用户可以在启动时选择要启动的内核或操作系统。例如,可以配置 LILO,以便如果在启动时(当 LILO 加载时)按住 altshiftctrl 键,LILO 将询问要启动什么,而不是立即启动默认值。或者,可以将引导加载器配置为始终询问,并带有可选的超时,超时将导致启动默认内核。

也可以在内核或操作系统名称之后给出内核命令行参数。有关可能的选项列表,您可以阅读 http://www.tldp.org/HOWTO/BootPrompt-HOWTO.html

从软盘启动和从硬盘启动各有优点,但通常从硬盘启动更好,因为它避免了摆弄软盘的麻烦。它也更快。大多数 Linux 发行版将在安装过程中为您设置引导加载程序。

在 Linux 内核通过任何方式读取到内存中并真正启动后,大致会发生以下事情

8.2.1. 关于引导加载器的一句话

待添加

本节将概述 GRUB 和 LILO 之间的区别。

有关 LILO 的更多信息,您可以阅读 http://www.tldp.org/HOWTO/LILO.html

有关 GRUB 的更多信息,您可以访问 https://gnu.ac.cn/software/grub/grub.html