1.3 KiB
1.3 KiB
8.14 Linux 系统的启动流程
引导阶段 -> 内核阶段 -> initramfs -> rootfs -> initrc -> systemd service
引导阶段
- 硬件引导层
- 第一阶段引导
- 第二极端引导等
通常硬件里集成了一组启动程序,硬件启动程序执行完后,将系统控制权交给引导程序。
引导程序可能有一级,也可能有多级。一般在 x86/64 平台上为 GRUB 等,而 ARM 平台上为 UBoot 等。在 ARM 平台上,如果厂商预置了其他引导程序,则通常在 UBoot 之前运行。
GRUB 或 UBoot 最主要的工作是准备内核运行环境,包括设置启动引导参数等。如设置串口输出的波特率,使用的设备树文件,内核或驱动的参数等。
内核阶段
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);