1. 操作系统与裸机环境下的程序执行差异
第一次接触嵌入式开发时,最让我困惑的就是操作系统环境与裸机环境的区别。这两种环境下,程序的执行流程和中断处理机制有着本质的不同。理解这些差异,对于后续开发工作至关重要。
在裸机环境下,程序直接运行在硬件上,没有中间层。CPU从上电开始就按照预设的路径执行指令,中断处理完全由硬件机制完成。而在操作系统环境下,内核作为中间层接管了所有硬件资源,包括中断处理、任务调度等关键功能。
关键区别:操作系统环境下,所有硬件资源都由内核统一管理;裸机环境下,开发者需要直接操作硬件资源。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 操作系统环境下的程序执行流程
2.1 Linux系统启动过程详解
让我们先深入分析Linux操作系统的启动流程,这是理解后续中断处理的基础:
-
上电阶段:开发板通电后,CPU从固定地址开始执行BootROM代码。这部分代码是芯片厂商预先烧录的,不可修改。
-
引导加载程序阶段:U-Boot作为引导加载程序,主要完成以下工作:
- 初始化DDR内存控制器
- 设置时钟树
- 加载设备树文件(dtb)
- 将Linux内核映像从存储设备加载到内存
-
内核启动阶段:内核启动后会进行一系列关键初始化:
c复制start_kernel() → setup_arch() // 架构相关初始化 → trap_init() // 异常向量表初始化 → mm_init() // 内存管理初始化 → sched_init() // 调度系统初始化 → time_init() // 时钟系统初始化 → rest_init() // 创建init进程
2.2 内核接管后的关键操作
内核完成基础初始化后,会进行五个关键操作:
-
中断控制器初始化:现代ARM架构通常使用GIC(Generic Interrupt Controller)。初始化过程包括:
- 设置中断优先级
- 配置中断触发方式(电平/边沿)
- 使能全局中断
