Linux启动过程概述
作者:杨冬 欢迎转载,也请保留这段声明。谢谢!
出处:https://andyyoung01.github.io/ 或 http://andyyoung01.16mb.com/
了解Linux系统如何启动对于理解Linux如何运转是非常有帮助的,本文就来了解一下Linux的启动过程。
1. 内核级别启动过程
先借用一个启动的流程图:
上图的大致过程如下:
- 通电后,寄存器reset,CPU跳转到BIOS(Basic Input/Output System)代码处开始执行
- BIOS进行POST(Power-On Self-Test, 硬件自检),初始化硬件
- BIOS查找引导设备
- BIOS引导程序读取位于该设备第一个扇区(512bytes)的主引导记录(MBR,Master boot record)到内存中,加载并将控制权转交给bootloader,加载kernel
- kernel自身初始化
- 挂载Rootfs
- 启动userspace程序(可以是init,upstart或systemd)
随着计算机软硬件的发展,传统的PC BIOS的局限性显现出来,于是其替代产品Unified Extensible Firmware Interface(UEFI)便开发出来。GPT的分区格式也是UEFI标准的一部分。通过UEFI搭配GPT进行启动的过程与传统BIOS搭配MBR是有区别的。详细信息可以参考鸟哥BIOS与UEFI开机检测程序。
2. 用户空间启动过程
在内核级别启动过程的最后(上图的最后一步),kernel会初始化一个pid为1的init进程,它根据配置文件启动其它进程。在不同的Linux发行版当中,主要有三个不同的init的实现,分别为:
- System V init
- Upstart
- Systemd
下面分别来看一下各个不同实现的启动过程。
2.1 System V init
2.2 Upstart
2.3 Systemd
本篇对于Linux的启动过程进行了一个概略。首先从硬件部分来看,分为两种:一种是传统的BIOS搭配MBR方式,另一种是较新的UEFI搭配GPT方式。其次,在进入用户空间后,根据不同的init实现方式,分为System V init,Upstart以及Systemd等。各个方式的详细信息请参考相关文档。