HaveFunWithEmbeddedSystem/Chapter8_SOC_与_Linux/8.14_Linux_系统的启动流程.md
chen.yang 142203b81d 补充 8.14 Linux 系统的启动流程.
Signed-off-by: chen.yang <chen.yang@yuzhen-iot.com>
2022-04-25 14:07:18 +08:00

1.3 KiB

8.14 Linux 系统的启动流程

引导阶段 -> 内核阶段 -> initramfs -> rootfs -> initrc -> systemd service

引导阶段

  1. 硬件引导层
  2. 第一阶段引导
  3. 第二极端引导等

通常硬件里集成了一组启动程序,硬件启动程序执行完后,将系统控制权交给引导程序。

引导程序可能有一级,也可能有多级。一般在 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);