当计算机启动时,BIOS将从存储设备的启动扇区(例如硬盘、U盘、光盘等)读取引导程序,并执行它。在Linux上,GRUB (Grand Unified Bootloader)通常是作为引导程序来进行执行。以下是解析Linux系统启动的引导流程的完整攻略。
BIOS引导
BIOS (Basic Input/Output System) 是个存储在主板固件存储芯片中的程序,当计算机启动时,BIOS 将检查所有硬件设备,然后从存储设备读取启动扇区的第一个512字节,这个扇区叫做主引导记录 (MBR,Master Boot Record)。
MBR引导
MBR 是引导程序的一部分,存储在硬盘的第一个扇区,占用512个字节。MBR由三个部分组成,分别是bootloader代码、分区表以及bootloader的签名。内核入口地址与GRUB grub.conf的位置就存储在MBR中的bootloader代码段中。
BootLoader引导
Bootloader是位于MBR之后的引导器,它的作用是加载操作系统核心,最常用的引导器是GRUB。GRUB可以通过在命令行中输入“grub>”和按TAB键获取可用命令。
GRUB启动过程
GRUB的启动过程包括如下3个步骤:
- 在MBR中寻找grub的二进制代码;
- 加载grub的配置文件;
- 根据配置文件加载操作系统内核。
下面是GRUB的启动示例代码:
default 0
timeout 5
title Linux
root (hd0,0)
kernel /vmlinuz root=/dev/hda1 ro
initrd /initrd
default 0
表示默认的启动项是第一个;timeout 5
表示启动时等待5秒,等待用户选择其他引导项;title Linux
是GRUB的菜单上显示的选项名;root (hd0,0)
告诉GRUB内核所在的设备和分区;kernel /vmlinuz root=/dev/hda1 ro
告诉GRUB内核位置以及操作系统所在的分区;initrd /initrd
则是指定可用的RAM磁盘。
内核引导
当GRUB加载内核后,内核被解压缩并加载到内存中,然后根据内核参数启动,内核包含设备驱动程序以及需要加载的其它程序。
示例1:Ubuntu 20.04 LTS的引导过程
Ubuntu 20.04 LTS的引导过程中使用的是GRUB2引导器。在BIOS引导过程中,寻找并加载MBR,然后MBR中的GRUB2将会被加载。GRUB2寻找并加载配置文件 grub.cfg,grub.cfg 中就包含了内核引导的设置,例如内核位置、内核参数等。在加载内核后,initramfs将被加载,initramfs包含了可供内核使用的必要驱动程序、文件系统以及各种工具。当initramfs被加载后,内核将根据内核参数启动。
示例2:CentOS 7的引导过程
CentOS 7的引导过程中使用的是GRUB Legacy。当BIOS引导时,寻找并加载MBR,然后MBR中的GRUB Legacy将会被加载。GRUB Legacy寻找并加载配置文件 menu.lst,menu.lst中就包含了内核引导的设置,例如内核位置、内核参数等。在加载内核后,initrd将被加载,initrd包含了可供内核使用的必要驱动程序、文件系统以及各种工具。当initrd被加载后,内核将根据内核参数启动。
以上是解析Linux系统启动的引导流程的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:解析Linux系统启动的引导流程 - Python技术站