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:通过
bootz或bootm命令传递内核和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)
系统完成启动后,进入运行阶段,此时设备已经准备好执行其嵌入式任务。

浙公网安备 33010602011771号