1. CPU启动流程与地址重映射基础解析
当按下电源键的那一刻,现代计算机系统中一场精密的"交响乐"便开始演奏。作为操作系统开发者,理解CPU从冷启动到完整运行的全过程至关重要。这个过程看似简单,实则包含了硬件初始化、固件加载、地址空间管理等一系列复杂操作。
在ARM架构处理器中,复位后的第一条指令总是从0x0地址获取。这个设计带来了一个有趣的矛盾:我们需要非易失性存储器(如NOR Flash)来存放启动代码,但同时又希望中断向量表位于可快速读写的RAM中以提高响应速度。地址重映射技术正是解决这一矛盾的关键。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 冷启动:从复位到第一条指令
2.1 硬件复位序列
当电源稳定后,CPU内部的复位电路会产生一个复位信号,将所有寄存器设置为已知状态。以ARM Cortex-M系列为例,复位后会进行以下操作:
- 设置初始堆栈指针(SP)值,从0x0地址读取
- 设置初始程序计数器(PC)值,从0x4地址读取
- 初始化关键寄存器如CONTROL、xPSR等
- 根据配置向量表偏移寄存器(VTOR)确定异常向量表位置
注意:不同ARM架构处理器的启动细节可能有所不同。Cortex-A系列通常通过EL(异常级别)机制实现更复杂的启动流程。
2.2 Bootloader的舞台
在操作系统内核接管之前,Bootloader负责搭建基本的运行环境。典型的Bootloader执行流程如下:
- 硬件初始化:关闭看门狗、配置时钟、初始化SDRAM控制器
- 内存测试:验证RAM可用性
- 设备枚举:识别Flash、串口等外设
- 环境设置:建立堆栈、初始化C运行时环境
- 加载内核:从存储设备读取操作系统映像
- 跳转执行:将控制权转交给操作系统
assembly复制/* 典型ARM汇编启动代码片段 */
.section .vectors
.word _stack_top /* 初始堆栈指针 */
.word Reset_Handler /* 复位向量 */
/* 其他异常向量... */
.section .text
Reset_Handler:
/* 关闭看门狗 */
LDR r0, =WTCON
MOV r1, #0x0
STR r
