The Linux Boot Process: From Power Button to Kernel
7 months ago
- #Kernel
- #Linux
- #Boot Process
- Linux启动过程始于按下电源键,触发从固件到内核执行的一系列步骤。
- CPU以实模式启动,使用段寄存器和偏移寄存器形成内存地址,并跳转到复位向量地址0xFFFFFFF0。
- BIOS或UEFI固件执行硬件检查,并从启动设备加载引导程序。
- 引导程序(如GRUB)将Linux内核加载到内存,其中包含设置程序和压缩的内核映像。
- 设置程序通过配置段寄存器、创建栈空间、清除BSS段以及从固件收集内存信息来准备运行环境。
- 从实模式切换到保护模式需建立GDT和IDT、启用分页机制,并谨慎切换CPU模式以避免中断干扰。
- 进一步过渡到64位长模式需要启用分页并设置EFER寄存器中的LME标志位。
- 压缩内核被解压(必要时重定位),真正的内核通过start_kernel函数开始执行。
- kASLR通过从空闲内存区域选择物理和虚拟基址来随机化内核内存地址,以增强安全性。