Linux操作系统启动流程可以分为以下3个阶段:
- BIOS/UEFI阶段
- 引导加载器(Boot Loader)阶段
- 内核加载和初始化阶段
以下是完整攻略:
Linux操作系统启动流程图文详解
1. BIOS/UEFI阶段
计算机启动之后,首先由BIOS/UEFI程序运行。它的主要作用是检测计算机配置、识别与阅读第一启动设备上的引导程序。
2. 引导加载器(Boot Loader)阶段
在BIOS/UEFI阶段的最后一步,BIOS/UEFI会在第一启动设备(通常是硬盘或USB)上寻找可引导的主引导记录(Master Boot Record,MBR),并复制到计算机内存中。该主引导记录负责加载引导加载器(Boot Loader)。
2.1 GRUB2引导加载器
常见的引导加载器有GRUB2(Grand Unified Bootloader 2)和LILO(Linux Loader)。
在此以GRUB2为例进行说明。
GRUB2是Linux中最通用的引导加载器,它提供图形化界面和命令行交互方式,可以选择不同的系统进行启动。GRUB2引导加载器的主要作用是加载Linux内核映像(vmlinuz)到内存,并执行内核映像。
GRUB2在执行时会依次读取以下几个文件:
- grub.cfg(主配置文件)
- 设备映像(通常为/boot目录下的initramfs或initrd.img文件)
- 内核映像(vmlinuz)
GRUB2在运行过程中会对这些文件进行处理,例如设备映像的解压缩、内核映像的解压缩和准备启动内核的启动参数等。
以下是GRUB2的启动流程:
1. BIOS/UEFI加载MBR到内存
2. MBR寻找/boot/grub目录下的core.img文件,将其加载到内存
3. core.img读取/boot/grub/grub.cfg文件,解析出menuentries并加载
4. menuentries中包含了指向设备映像和内核映像的引导配置信息
5. 设备映像的启动参数和内核映像的启动参数被合并成最终的内核启动参数
6. 内核映像被加载到内存中
此外,GRUB2还提供了许多配置选项,用户可以通过修改配置文件进行自定义。
3. 内核加载和初始化阶段
当GRUB2将内核映像成功加载到内存后,就会将控制权转移给内核,让内核开始运行。内核运行后会进行一系列的初始化操作,例如初始化进程管理、文件系统、网络等。最后,内核启动init程序作为其进程1,开始用户空间初始化工作。
3.1 init进程
init程序(/sbin/init)是Linux系统中初始化进程,它是用户空间的第一个进程,负责启动其他进程和系统服务。
init进程的启动过程包含以下几个步骤:
- 内核启动init程序作为其进程1
- init程序读取/etc/inittab文件,根据其中定义的内容决定如何启动其他进程和服务
- init程序根据运行级别(runlevel)启动不同的服务
- init程序读取/etc/rc.d目录中的脚本来启动其他服务
例如,在默认情况下(运行级别为5),init程序会启动X Window系统、网络服务、打印服务等。
示例说明
示例1:GRUB2 修改配置选项
假如我们想要改变GRUB2的启动选项,在第二个菜单项中添加“nomodeset”选项来禁用显卡驱动。
可以通过修改/etc/default/grub文件,并在GRUB_CMDLINE_LINUX_DEFAULT变量中添加“nomodeset”选项,然后执行以下命令来更新GRUB2配置文件:
sudo update-grub
示例2:Kernel 参数启用 SCHED_DEBUG
假如我们想要启用Linux内核的“SCHED_DEBUG”参数来分析进程调度过程。
可以通过修改GRUB2的配置文件,在GRUB_CMDLINE_LINUX_DEFAULT变量中添加“SCHED_DEBUG”选项,然后执行以下命令来更新GRUB2配置文件:
sudo update-grub
以上就是Linux操作系统启动流程的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux操作系统启动流程图文详解 - Python技术站