6.1 操作系统的启动流程
读书笔记(。-ω-)zzz
PC的主板上装有一段固化的程序,它在系统通电、处理器复位后首先得到执行。不同处理器的开始地址取决于处理器复位后程序计数器的初始值。对于Intel X86(或AMD)的个人计算机来说,这段程序又叫基本输入/输出系统(Basic Input/Output System, BIOS),它从内存地址0x000FFFF0处开始运行。
在系统启动阶段,BIOS执行通电自检过程,包括检查CPU、存储器、I/O接口等,并对这些设备进行必要的初始化。其中一个重要的步骤就是根据主板上CMOS(PC主板上的一块存储设备,它由CMOS电路构成)的参数设置确定一个可引导操作系统的外部存储设备(光盘、硬盘或U盘等),并将这个存储设备的第一段数据块装入内存尝试运行。
主引导记录(master boot record, MBR)位于硬盘的第一物理扇区。
主引导记录中的启动代码称作引导加载器(Boot Loader,准确地说,是Boot Loader的一部分)。为了与主板上固化的引导代码相区别,硬盘中的这段Boot Loader又叫做第二阶段Boot Loader,而将BIOS中的引导代码称为第一阶段Boot Loader。
一些嵌入式处理器在构成微机系统时,由于不能像PC那样把引导代码做在主板上,设计了一小段引导代码,此时外部存储器中仍然允许构造第二阶段Boot Loader,通常所说的Boot Loader主要指这一阶段的过程。
用于引导Linux的Boot Loader不止一种。早期的Linux桌面系统使用LiLo(Linux Loader),如今绝大多数发行版都使用GRUB(Grand Unified Bootloader)。在嵌入式Linux系统中则大量使用U-Boot。
Boot Loader的作用如下。
在安装多系统的计算机上(包括同一操作系统的不同版本)可以选择引导不同的操作系统;
提供操作系统的初始化参数;
在嵌入式系统中,Boot Loader还可能要提供核心系统升级功能。
GRUB的配置文件是/boot/grub/grub.cfg

配置文件中指定了每个可引导操作系统的内核镜像文件、初始化RAMDisk镜像文件,以及向内核传递的参数。
在Linux系统中,这些镜像文件通常位于/boot目录下,内核以"vmlinuz-版本号"命名,RAMDisk以“initrd.img-版本号”命名。

传递的参数一般是根文件系统所在分区(分区设备名或UUID)、根文件系统挂载方式、系统初始化命令等。
当使用GRUB引导Linux操作系统时,GRUB会根据配置文件找到Linux的内核镜像文件,将其读入内存,并向它传递配置文件中预定的参数,最后,跳入内核的入口地址。至此,Linux开始运行。一旦内核初始化完成,便执行由GRUB传来的初始化命令,而Boot Loader的使命则暂告一段落。
