linux启动过程

目前电脑的启动的方式分为BIOS+MBR 和UEFI+GPT两种。

第一种方式:BIOS+MBR

1.按电源
2.读取BIOS芯片
3.选择启动顺序为首的存储设备
4.读取存储设备主引导扇区,即开头512字节。如果该512字节的结束字符为0xAA55时,表示这个设备可以用于启动, 否则表示不能用于启动系统。

此处具体介绍一下主引导扇区:
主引导扇区不属于此块磁盘上的任意一个分区,因此分区空间内的格式化命令不能清除主因到记录的信息。这也是主引导分区中的病毒难查杀的重要原因。
4.1结构
446
0000H-0088H 主引导记录(即主引导程序MBR) 共计136个字节
0089H-00BDH 出错信息 共计310个字节
01BEH-01FDH 分区表(DPT) 共计64个字节
01FEH-01FFH 幻数 0x55AA 共计2个字节

4.2主引导程序
检查分区表是否正确,在硬件自检完成之后引导具有激活标志的分区上的操作系统,并将计算机的控制权交给启动程序。

4.3分区表

DPT一共为64个字节,最多分为四个组,这也是一块硬盘上最多只有四个主分区的原因。每个组占用16个字节。其中:
第一字节 引导标志,若值为80H表示为活动分区,若值为00H表示为非活动分区。
第二字节 本分区的起始磁头号
第三字节低六位 本分区的起始扇区号
第三字节高两位+第四字节 柱面号
第五字节 分区类型标志
第六字节 本分区的结束磁头号
第七字节低六位 结束扇区号
第七字节高二位+第八字节 柱面号
9+10+11+12 本分区已用扇区数
13+14+15+16 本分区总的扇区数

5.启动boot loader即linux中的grub或者grub2
6.读取/sbin/init程序,对于parrot来讲,运行的是systemd程序。
7.根据预先设定的默认运行级别选择开启的服务数量(例如级别一不需要启动x图形服务等),但是我们已经没有inittab了,而是使用systemctl set-default xxx.target实现。当然,也可以通过修改/etc/rcx.d中的链接实现
8.用户登录界面,输入密码,读取用户空间内的相应设置,操作系统启动完成。

第二种方式:UEFI+GPT
首先做简单介绍,参考自archwiki(别人家的wiki)
UEFI 全称为Unified Extensible Firmware Interface 翻译为统一可扩展固件接口,用于替换legancy bios
此处介绍一下GPT(GUID Patition Table,GUID分区表),GPT是使用全局唯一标识符(GUID,globally unique identifiers全局唯一标识符)在PC上的物理存储设备中使用的分区表布局标准,它是UEFI的一部分,但是在某些情况下可以用于BIOS引导中。

1.点击电源
2.开机自检
3.加载UEFI固件,固件初始化引导相应的硬件
4.读取固件管理器中的相关条目,确定相应分区
5.查找/efi分区,查找其中的\EFI\BOOT\BOOTTX64.EFI并启动
6.启动引导管理器(如system-boot)或者直接加载Linux内核。
7.读取/sbin/init程序,对于parrot来讲,运行的是systemd程序。
8.根据预先设定的默认运行级别选择开启的服务数量(例如级别一不需要启动x图形服务等),但是我们已经没有inittab了,而是使用systemctl set-default xxx.target实现。当然,也可以通过修改/etc/rcx.d中的链接实现
9.用户登录界面,输入密码,读取用户空间内的相应设置,操作系统启动完成。

文章目录
,