linux 从上电到操作系统运行的完整启动流程

1. 上电阶段 (Power-On)

  • 硬件上电:电源供应稳定,系统硬件启动。关键硬件(如电压调节器、电容等)确保电路达到工作条件。
  • 复位信号:复位电路释放复位信号,使 CPU 开始从预定义的地址(通常是 ROM 的起始地址)执行代码。

2. 引导阶段 (Bootloader)

引导阶段是嵌入式系统启动的核心部分,负责初始化硬件并将操作系统加载到内存中。可以分为以下几个子阶段:

(1)第一阶段引导 (Stage 1 Bootloader)

  • 代码存储位置:通常是固化在芯片内部的片上存储器。
  • 关键功能:
    o CPU 初始化:设置时钟频率、配置缓存和 MMU(若有)。
    o 基础硬件初始化:初始化 DRAM(如果操作系统需要加载到 RAM 中)、串口(用于调试)。
    o 加载第二阶段引导程序到 RAM 中

(2)第二阶段引导 (Stage 2 Bootloader - uboot)

  • 硬件初始化:初始化CPU外设(工作模式、中断、关MMU等)和板级外设(网卡、存储控制器、显示设备等)
  • uboot重定位:把uboot从低地址搬到高地址,给kernel腾位置
  • kernel加载:将操作系统镜像(如 Linux 的内核)从外部存储(NAND、eMMC、SD 卡等)加载到 DRAM 中
  • 设备树加载:将设备树加载到 DRAM 中
  • 设置启动参数(bootargs):将根文件系统地址、控制台等信息存储在设备树的 chosen 节点中传递给 kernel
  • 跳转到kernel:通过bootzbootm命令传递内核和DTB地址,并跳转到内核入口点

Bootloader 通常被分成多个阶段,以实现模块化和灵活性。第一阶段占用更少的空间并能运行在有限的存储器中,而第二阶段则承担更复杂的任务。

3. 内核加载阶段 (Kernel Boot)

操作系统内核接管引导过程,完成系统初始化。以 Linux 为例:

  • 硬件抽象层初始化:
    o 初始化中断控制器。
    o 设置内存管理(分页、虚拟内存等)。
    o 初始化时钟和调度器。
  • 驱动加载:
    o 解析设备树,加载设备驱动程序(如 UART、I2C、SPI)。
    o 设置根文件系统(Root Filesystem)。
  • 挂载根文件系统:操作系统需要一个文件系统来访问用户级应用程序和资源。

4. 用户空间初始化 (User Space Init)

内核完成后,启动用户空间的进程,通常包括:

  • init 进程:用户空间的第一个进程,负责启动其他系统服务和应用程序。
  • 系统服务启动:
    o 启动守护进程(如网络管理、日志服务)。
    o 加载动态模块(如驱动程序模块)。
  • 运行用户应用程序:最终执行目标应用程序,例如嵌入式 GUI 或控制系统逻辑。

5. 运行阶段 (Operational Phase)

系统完成启动后,进入运行阶段,此时设备已经准备好执行其嵌入式任务。

 

posted @ 2025-05-28 11:03  流水灯  阅读(140)  评论(0)    收藏  举报