uboot启动过程分析
Uboot启动过程分析 Uboot启动过程可以分为两个阶段,两个阶段的功能如下: 第一阶段的功能: * 硬件设备初始化 * 加载U-Boot第二阶段代码到RAM空间 * 设置好栈 * 跳转到第二阶段代码入口 第二阶段的功能: * 初始化本阶段使用的硬件设备 * 检测系统内存映射 * 将内核从Flash读取到RAM中 * 为内核设置启动参数 * 调用内核 U-Boot启动第一阶段代码分析: 第一阶段对应的文件是cpu/arm920t/start.S和board/samsung/mini2440/lowlevel_init.S。U-Boot启动第一阶段流程如下: 1. 硬件设备初始化 在cpu/arm920t/start.S开头有如下代码: .globl _start _start: b start_code /* 复位*/ ldr pc, _undefined_instruction /* 未定义指令向量 */ ldr pc, _software_interrupt /* 软件中断向量 */ ldr pc, _prefetch_abort /* 预取指令异常向量 */ ldr pc, _data_abort /* 数据操作异常向量 */ ldr pc, _not_used /* 未使用 */ ldr pc, _irq /* irq 中断向量 */ ldr pc, _fiq /* fiq 中断向量 */ /* 中断向量表入口地址 */ 以上代码设置了ARM异常向量表,各个异常向量介绍如下: 表 2.1 ARM 异常向量表 地址 异常 进入模式描述 0x00000000 复位 管理模式 复位电平有效时,产生复位异常,程序跳转到复位处理程序处执行 0x00000004 未定义指令 未定义模式 遇到不能处理的指令时,产生未定义指令异常 0x00000008 软件中断 管理模式 执行 SWI 指令产生,用于用户模式下的程序调用特权操作指令 0x0000000c 预存指令中止 管理模式 处理器预取指令的地址不存在,或该地址不允许当前指令访问,产生指令预取中止异常 0x00000010 数据操作中止 管理模式 处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常 0x00000014 未使用 未使用 未使用 0x00000018 IRQ IRQ 外部中断请求有效,且 CPSR 中的 I 位为 0 时,产生 IRQ 异常 0x0000001c FIQ FIQ 快速中断请求引脚有效,且 CPSR 中的 F 位为 0 时,产生 FIQ 异常 在cpu/arm920t/start.S中还有这些异常对应的异常处理程序。当一个异常产生时,CPU 根据异常号在异常向量表中找到对应的异常向量,然后执行异常向量处的跳转指令,CPU 就跳转到对应的异常处理程序执行。 其中复位异常向量的指令“b start_code”决定了 U-Boot 启动后将自动跳转到标号“start_code”处执行。 2. CPU 进入 SVC 模式 start_code: /* * set the cpu to SVC32 mode */ mrs r0, cpsr bic r0, r0, #0x1f /*工作模式位清零 */ orrr0, r0, # U-Boot 启动第一阶段的代码主要是设置了硬件设备的初始化和异常向量表,接着跳转到第二阶段代码入口。在第二阶段中,U-Boot 将继续初始化硬件设备,并将内核从Flash读取到RAM中,然后设置好栈和启动参数,最后调用内核。
剩余28页未读,继续阅读
- 喝开水凉牙2012-12-28讲解详细,有参考价值。
- hobbyjobs2012-09-26讲解的还算详细的,谢谢分享
- 粉丝: 134
- 资源: 14
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助