深入浅出Linux系统启动流程完全解析(从BIOS到systemd)

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

## 深入浅出Linux系统启动流程完全解析(从BIOS到systemd)

BIOS/UEFI初始化

计算机通电后,CPU重置寄存器并执行预定义的地址指令(通常是0xFFFF0),该地址指向主板ROM中存储的BIOS(基本输入输出系统)或更新的UEFI(统一可扩展固件接口)程序。BIOS/UEFI首先进行加电自检(POST),检测关键硬件设备如CPU、内存、存储控制器等是否正常工作。

随后,固件根据预设的启动顺序(如硬盘、USB、网络)查找可启动设备。对于传统BIOS,它会在存储设备的第一个扇区(主引导记录,MBR,512字节)中寻找引导代码;而UEFI则直接读取EFI系统分区(ESP)中的.efi应用程序。

引导加载程序阶段

MBR中的引导代码(第一阶段引导程序,通常占446字节)被加载到内存并执行。由于MBR空间有限,它主要负责加载位于磁盘特定位置的第二阶段引导程序(如GRUB的core.img)。GRUB(GRand Unified Bootloader)等现代引导加载程序会加载其核心镜像和模块,从而能够识别文件系统。

GRUB读取其配置文件(如/boot/grub/grub.cfg),将启动菜单呈现给用户。用户选择或默认等待超时后,GRUB根据配置加载指定的Linux内核镜像(vmlinuz)和可选的初始RAM磁盘镜像(initramfs)到内存中,并将控制权移交内核。

内核引导与初始化

内核被加载到内存后开始解压自身。它初始化系统核心功能,如设置内存管理、调度器、中断处理等。内核会尝试识别和初始化系统中尽可能多的硬件设备。然而,此时根文件系统所在的存储设备(如SATA、NVMe控制器)或文件系统驱动(如ext4、XFS)可能尚未加载,因为它们可能以内核模块形式存在,而模块存储在根文件系统内。

为了解决这个“先有鸡还是先有蛋”的问题,initramfs(初始RAM文件系统)发挥了关键作用。它是一个临时的根文件系统,被加载到内存中,其中包含了在内核启动早期阶段必需的核心驱动程序、工具和脚本。

initramfs的作用

内核挂载initramfs作为临时根文件系统,并执行其中的初始化脚本(通常是/init)。该脚本的任务是加载访问真实根文件系统所需的内核模块(例如,用于RAID、LVM、加密LUKS的设备映射器驱动,或特定的文件系统驱动)。

脚本还会执行必要的操作,比如在需要时提示输入加密根分区的密码,或者扫描并激活软件RAID阵列和逻辑卷。一旦真实的根文件系统(如/dev/mapper/vg0-root)准备就绪,脚本会通过pivot_root系统调用将根文件系统从initramfs切换到真实的根文件系统。

系统初始化与systemd接管

切换根文件系统后,旧版本的系统会执行位于/sbin/init的程序,它是系统中第一个被启动的用户空间进程(PID 1)。在现代大多数Linux发行版中,/sbin/init通常是systemd程序的符号链接。systemd作为初始化系统,将接管后续的所有启动过程。

systemd首先执行默认目标(target)单元,通常是multi-user.target或graphical.target。它会根据依赖关系,并行启动系统服务和守护进程,如网络服务(NetworkManager)、日志服务(journald)、登录管理器(GDM/LightDM)等。

systemd的启动流程

systemd的启动过程是高度模块化和并行的。它会读取/etc/systemd/system/和/lib/systemd/system/目录下的单元文件(.service, .target等)。systemd通过分析单元文件中的依赖关系(如After=, Requires=),尽可能并行启动没有依赖冲突的服务,从而加快启动速度。

最终,当所有必需的服务启动完毕,系统会提供一个文本登录界面(multi-user.target)或图形化登录界面(graphical.target),等待用户登录。至此,整个Linux系统的启动流程完成。

开发板推荐:天空星STM32F407VET6开发板

超高性价比 STM32主控 | 超高主频 | 一板兼容百芯 | 比赛神器 | 沉金彩色丝印

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值