补充 8.14 Linux 系统的启动流程.

Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
This commit is contained in:
chen.yang 2022-04-25 14:07:18 +08:00
parent 8761d8b2b6
commit 142203b81d
1 changed files with 33 additions and 0 deletions

View File

@ -0,0 +1,33 @@
# 8.14 Linux 系统的启动流程
引导阶段 -> 内核阶段 -> initramfs -> rootfs -> initrc -> systemd service
## 引导阶段
1. 硬件引导层
2. 第一阶段引导
3. 第二极端引导等
通常硬件里集成了一组启动程序,硬件启动程序执行完后,将系统控制权交给引导程序。
引导程序可能有一级,也可能有多级。一般在 x86/64 平台上为 GRUB 等,而 ARM 平台上为 UBoot 等。在 ARM 平台上,如果厂商预置了其他引导程序,则通常在 UBoot 之前运行。
GRUB 或 UBoot 最主要的工作是准备内核运行环境,包括设置启动引导参数等。如设置串口输出的波特率,使用的设备树文件,内核或驱动的参数等。
## 内核阶段
```cpp
arch/arm/kernel/head.S // 内核的启动汇编
|
+----secondary_start_kernel // 跳转到 C 语言的入口函数
|
----init/main.c —> void __init start_kernel(void) // C 语言的程序入口
|
+---arch/<arch>/kernel/setup.c -> setup_arch(&command_line); // 体系结构初始化
| |
| +---setup_machine(machine_arch_type); //配置当前的机器类型
| |
| +----xxxxx_init_machine();
|
+---setup_command_line(command_line);
```