UBoot中start.S源码深度解析
需积分: 10 67 浏览量
更新于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 上传
点击了解资源详情
2023-05-19 上传
2023-06-10 上传
2023-05-19 上传
2023-06-01 上传
2023-07-25 上传
2023-06-02 上传
xuner007
- 粉丝: 0
- 资源: 1
最新资源
- 构建Cadence PSpice仿真模型库教程
- VMware 10.0安装指南:步骤详解与网络、文件共享解决方案
- 中国互联网20周年必读:影响行业的100本经典书籍
- SQL Server 2000 Analysis Services的经典MDX查询示例
- VC6.0 MFC操作Excel教程:亲测Win7下的应用与保存技巧
- 使用Python NetworkX处理网络图
- 科技驱动:计算机控制技术的革新与应用
- MF-1型机器人硬件与robobasic编程详解
- ADC性能指标解析:超越位数、SNR和谐波
- 通用示波器改造为逻辑分析仪:0-1字符显示与电路设计
- C++实现TCP控制台客户端
- SOA架构下ESB在卷烟厂的信息整合与决策支持
- 三维人脸识别:技术进展与应用解析
- 单张人脸图像的眼镜边框自动去除方法
- C语言绘制图形:余弦曲线与正弦函数示例
- Matlab 文件操作入门:fopen、fclose、fprintf、fscanf 等函数使用详解