U-Boot启动流程:判断寄存器与引导方式设置
需积分: 46 187 浏览量
更新于2024-08-09
收藏 324KB PDF 举报
本篇文档主要讨论了U-Boot(一个开源的嵌入式启动加载器)中的启动判断寄存器读取与配置过程,以及针对不同类型的存储设备启动方式的选择。首先,通过`ldr`指令从`PRO_ID_BASE`寄存器位置读取启动信息,该信息通常存储了启动方式设置,例如NAND Boot、SD/MMC Boot、NOR Boot或UART/USB Boot等,通过位运算提取OM[5:1]位来确定驱动方式。
具体操作步骤如下:
1. 通过`ldr r0, =PRO_ID_BASE`获取启动信息基地址。
2. 使用`ldr r1, [r0,#OMR_OFFSET]`加载启动信息,偏移量通常为0x04,得到的寄存器值会包含启动方式设置。
3. 使用`bic r2, r1, #0xffffffc1`操作清除高5位(除了最低位),得到OM[5:1],这代表了驱动选择的依据,如512B 4-cycle NAND Boot、2KB 5-cycle ECC NAND Boot等。
接下来,根据不同的启动方式值,通过`cmp`和`moveq`指令将对应的驱动类型写入`INFORM3`寄存器,以便U-Boot根据这些设置执行相应的设备初始化。
文档还提及了U-Boot的入口点 `_start`,它位于`cpu/s5pc11x/start.S`文件中。该入口点包括异常中断向量的处理,如reset异常、软件中断、预取异常、数据异常等,通过`.word`指令定义了向量地址,并且在 `_irq`处设置了中断处理程序的入口点`do_irq`,用于统一处理各种中断事件。
值得注意的是,文档还提到在`_start`之前填充了一些固定长度的数据,以确保代码段的对齐,如16字节的对齐。此外,`reset`异常处理部分涉及了对一些地址变量的初始化,如`_TEXT_BASE`,其值为0xc3e00000,这是一个虚拟地址,可能与特定硬件平台的配置有关。
本资源主要关注的是嵌入式系统启动过程中的寄存器操作,以及U-Boot如何根据启动判断寄存器内容配置硬件驱动,同时展示了U-Boot的基本结构和异常处理机制。这对于理解嵌入式系统启动流程和调试工作具有重要意义。
2018-01-16 上传
2022-07-15 上传
2022-01-08 上传
105 浏览量
596 浏览量
571 浏览量
点击了解资源详情
张诚01
- 粉丝: 32
- 资源: 3926
最新资源
- AA4MM开源软件:多建模与模拟耦合工具介绍
- Swagger实时生成器的探索与应用
- Swagger UI:Trunkit API 文档生成与交互指南
- 粉红色留言表单网页模板,简洁美观的HTML模板下载
- OWIN中间件集成BioID OAuth 2.0客户端指南
- 响应式黑色博客CSS模板及前端源码介绍
- Eclipse下使用AVR Dragon调试Arduino Uno ATmega328P项目
- UrlPerf-开源:简明性能测试器
- ConEmuPack 190623:Windows下的Linux Terminator式分屏工具
- 安卓系统工具:易语言开发的卸载预装软件工具更新
- Node.js 示例库:概念证明、测试与演示
- Wi-Fi红外发射器:NodeMCU版Alexa控制与实时反馈
- 易语言实现高效大文件字符串替换方法
- MATLAB光学仿真分析:波的干涉现象深入研究
- stdError中间件:简化服务器错误处理的工具
- Ruby环境下的Dynamiq客户端使用指南