linux开机引导
开机引导过程
第一阶段:硬件引导启动
打开电源
BIOS
- POST初始化硬件:cpu,内存,显卡,io设备等
- 确定启动设备:硬盘,光盘,网络,U盘。
当以硬盘为启动项时,读取第一个扇区(MBR,512字节)到内存。
MBR
MBR的512字节分为三个部分:
- 引导加载程序(Boot Loader)446字节:引导加载程序负责引导操作系统,它通常会读取分区表,找到活动(active)分区,并加载该分区的引导扇区,从而启动操作系统。其中包含了GRUB程序的一部分。
- 分区表(Partition Table)64字节:分区表描述了硬盘上的分区布局,包括分区的起始位置、大小和分区类型等信息。每个主分区或扩展分区都有一个16字节的分区表项来描述。
- 结束标志 2字节:MBR的最后两个字节用于存储结束标志 0x55AA,以标识MBR的结尾。
总结:运行放在MBR扇区里的启动 GRUB引导程序。
第二阶段:GRUB2启动引导(gran utified bootloader)
grud是grand utified bootioader的简称,本质就是一个迷你的操作系统,它负责加载真正的操作系统,linux将bootloader的程序码执行与设置值载入分成两个阶段(stage)来执行:
Stage1:执行bootloader主程序:第一阶段为执行bootloader的主程序,这个主程序必须要被安装在开机区,亦即是mbr或者是bootsector。但是,因为mbr实在太小了,所以,mbr或bootsector通常仅安装boot loader 的最小主程序,并没有安装loader 的相关配置文件;
Stage2:主程序载入配置文件:第二阶段为通过bootloader载入所有配置文件与相关的环境参数文件(包括文件系统定义与主要配置文件grub.cfg),一般来说,配置文件都在/boot下面。
总结:GRUB引导程序通过读取GRUB配置文件/boot/grub2/grub.cfg,来获取内核和镜像文件系统的设置和路径位置。
第三阶段:内核引导
/boot/vmlinuz:
这是Linux内核的压缩形式。内核是操作系统的核心部分,负责管理系统的资源和提供各种系统服务。vmlinuz文件包含了Linux内核的可执行代码,它是系统启动时加载到内存中的部分,负责启动并运行Linux操作系统。
在启动过程中,Boot Loader(如GRUB)会加载vmlinuz文件到内存,并将控制权交给它,以启动Linux操作系统。
/boot/initramfs:
initramfs(Initial RAM File System)是一个临时的根文件系统,它被加载到内存中,并在系统引导过程中用来提供必要的设备驱动程序和工具,以便在正式的根文件系统(如/)被挂载之前完成系统初始化过程。
initramfs通常包含了用于加载真正的根文件系统所需的设备驱动程序、文件系统模块、工具和其他必要的文件。它的主要目的是在引导过程中提供必要的支持,以便正确地挂载并启动真正的根文件系统。
一旦真正的根文件系统被成功挂载,initramfs就会被卸载并释放内存。
内核初始化
总结:把内核和镜像文件系统加载到内存中 可以使用
第四阶段:系统初始化
/uer/lib/systemd/system
systemd 进程开始执行各种单元文件中指定的任务,包括加载并启动其他系统服务、挂载文件系统、设置系统时间等。
第五阶段:启动终端
一旦系统初始化完成,通常会显示登录界面,等待用户登录。用户登录后,系统会启动用户环境并提供相应的服务。