UBoot中start.S源码深度解析
需积分: 10 174 浏览量
更新于2024-07-29
收藏 1.89MB PDF 举报
"对uboot中的start.s代码进行深入解析,涵盖了CPU模式设置、看门狗关闭、中断禁用、堆栈指针配置、bss段清除、异常中断处理等内容,并探讨了相关知识点,如查看源代码对应的汇编、CPU模式选择、watchdog的作用、ARM处理器的PC值、寄存器别名、APCS、堆栈在C和汇编中的应用、adr伪指令的使用等。"
在UBOOT启动过程中,`start.s`是第一个被执行的汇编代码,它承担着系统初始化的重要任务。文章首先介绍了`start.s`的基本功能,然后逐段分析了代码的具体实现。
1. **设置CPU模式**:CPU在上电复位后处于不确定的模式,`start.s`会将其切换到 SVC(Supervisor)模式,这是执行初始化操作的安全模式。
2. **关闭看门狗**:看门狗定时器用于防止系统在无响应时长时间运行,关闭它是为了在系统初始化期间避免不必要的中断。
3. **关闭中断**:在初始化阶段,系统需要一个稳定的环境,关闭中断可以防止未预期的外部事件干扰。
4. **设置堆栈sp指针**:堆栈指针(sp)的设定至关重要,它用于存储函数调用时的返回地址和其他临时数据。
5. **清除bss段**:bss段存放未初始化的全局变量和静态变量,清零保证了程序启动时这些变量的初始状态。
6. **异常中断处理**:设置异常向量表,定义中断和异常的处理方式,确保系统能正确响应各种异常情况。
文章还深入讨论了相关知识点:
- 如何通过反汇编工具查看C或汇编源代码对应的机器码。
- 设置CPU为SVC模式的原因,是因为这个模式提供了较高的权限,适合系统初始化。
- watchdog是防止系统冻结的机制,初始化时关闭它是为了避免在配置系统时触发复位。
- ARM处理器的PC(程序计数器)在执行完一条指令后自动加8,这是因为ARM指令通常是32位,占4个字节。
- APCS(ARM Procedure Call Standard)是ARM的调用约定,规定了函数调用时的参数传递、寄存器使用及堆栈操作规则。
- C语言函数调用需要堆栈来保存上下文和传递参数,而汇编语言可以直接访问寄存器,无需堆栈。
- `adr`伪指令用于获取相对地址,而非`mov`指令直接加载绝对地址,这有助于代码移植性。
- `mov`指令的操作数范围取决于目标架构,通常在32位ARM中,它可以加载16位立即数并扩展到32位。
文章最后对`start.s`的各部分做了总结,并介绍了UBOOT内存布局的一般概念,同时提供了汇编学习的一些心得,包括标号、跳转指令、全局声明的对应关系等。这对于理解UBOOT启动流程和深入学习嵌入式系统编程非常有帮助。
2010-03-08 上传
2016-06-24 上传
2012-10-31 上传
2011-01-25 上传
2010-07-19 上传
2012-07-22 上传
点击了解资源详情
xuner007
- 粉丝: 0
- 资源: 1
最新资源
- 黑板风格计算机毕业答辩PPT模板下载
- CodeSandbox实现ListView快速创建指南
- Node.js脚本实现WXR文件到Postgres数据库帖子导入
- 清新简约创意三角毕业论文答辩PPT模板
- DISCORD-JS-CRUD:提升 Discord 机器人开发体验
- Node.js v4.3.2版本Linux ARM64平台运行时环境发布
- SQLight:C++11编写的轻量级MySQL客户端
- 计算机专业毕业论文答辩PPT模板
- Wireshark网络抓包工具的使用与数据包解析
- Wild Match Map: JavaScript中实现通配符映射与事件绑定
- 毕业答辩利器:蝶恋花毕业设计PPT模板
- Node.js深度解析:高性能Web服务器与实时应用构建
- 掌握深度图技术:游戏开发中的绚丽应用案例
- Dart语言的HTTP扩展包功能详解
- MoonMaker: 投资组合加固神器,助力$GME投资者登月
- 计算机毕业设计答辩PPT模板下载