1 启动过程概述
1.1 第一阶段:BIOS
BIOS是启动过程的第一阶段,在上电事件后开始。CPU的程序计数器在上电事件后被初始化为一个特定的内存地址,驻留在只读存储器(ROM)中的BIOS就是从这个特定的内存地址开始执行。
BIOS执行硬件的基本初始化(POST:上电自检)并将系统控制权交给你指定的下一步骤。BIOS通常和硬件一同提供。
硬件位置和BIOS启动的代码的优先级可以在BIOS配置界面中选择。通常,在已选择的设备(硬盘、软件、CD-ROM……)中,最先找到的设备的最开始的几个扇区将被加载到内存,并执行其中的初始化代码。初始化代码可以是以下任意一种。
- 引导加载代码
- 类似FreeDOS这样的过滤型操作系统的内核代码
- 能够加载到如此小的空间中的目标操作系统的内核代码
通常,系统从主硬件的特定分区中引导。传统PC硬盘的最开始两个扇区中包含了主引导记录(MBR)。在MBR的末尾记录了磁盘分区信息及引导选择。BIOS中执行的首段引导加载代码占据了MBR的其余部分。
1.2 第二阶段:引载加载程序
由BIOS启动,将系统内核映像和initrd映像加载到内存并将控制权交给它们。initrd映像是根文件系统映像,其支持程度依赖于所使用的引导加载程序。
当前2.6/3.x版本Linux内核的initrd镜像从技术上说是initramfs(初始化RAM 文件系统)镜像。基本的initrd镜像是root文件系统中各个文件使用cpio压缩得到的。内核可以在启动流程中非常早的阶段,在加载基本的initrd镜像之前即更新微码。以未压缩cpio格式存储微码二进制文件的initrd镜像和基本initrd镜像两部分可以联合组成一个initrd镜像,从而帮助实现上述功能。
Debian系统默认将PC 平台的GRUB引导加载程序的第一阶段代码安装在MBR 中。
传统GRUB的菜单配置文件位于/boot/grub/menu.lst
。例如,文件中有如下的配置条目:
title Debian GNU/Linux
root (hd0,2)
kernel /vmlinuz root=/dev/hda3 ro
initrd /initrd.img
在debian10和11中均为找到上述文件。
GRUB第2版的菜单配置文件位于/boot/grub/grub.cfg。此文件由/usr/sbin/update-grub根据”/etc/grub.d/*”中的模板及”/etc/default/grub”中的设置自动生成。例如,文件中有如下的配置条目。
软件包 | initrd | 引导加载程序 | 说明 |
---|---|---|---|
grub-legacy | 支持 | 传统GRUB | 可智能识别磁盘分区和文件系统(如vfat、ext3……) |
grub-pc | 支持 | GRUB第2版 | 可智能识别磁盘分区和文件系统(如vfat、ext3……)。默认安装 |
grub-rescue-pc | 支持 | GRUB第2版 | 此为GRUB第2版的可引导修复映像(CD和软盘)(PC/BIOS版本) |
lilo | 支持 |