U-Boot重定位:start.S与uboot.lds详解
需积分: 0 92 浏览量
更新于2024-08-04
收藏 2.34MB PDF 举报
本文档主要探讨了U-Boot的重定位过程,特别是在ARM架构下的实现细节。首先,介绍了U-Boot启动后为何需要重定位,通常情况下,链接地址、加载地址和运行地址应保持一致,但在U-Boot中,由于代码被拷贝到SDRAM的特定位置(gd->relocaddr),这些地址不再相同,这就涉及到代码段(.text)、只读数据段(.rodata)、数据段(.data)以及全局变量的重定位。
1.1 重定位原理
在编译C代码时,函数通过相对跳转(b/bl)的方式工作,不受重定位影响。然而,全局变量使用的是绝对地址,这意味着它们需要在链接阶段被修改,以便指向重定位后的正确地址。例如,在LCD项目的示例中,如果常量数组sunflower_320x240的初始链接地址为0x30000000,但U-Boot重定位后,这个地址会发生变化,因此需要进行相应调整。
文章接下来详细讲解了`arch/arm/lib/relocate.S`中的关键函数`relocate_code()`,它处理不同类型的重定位,包括`.text`、`.rodata`、`.data`段以及`.rel.dyn`的处理。`.rel.dyn`是动态链接表,用于记录需要在运行时进行重定位的地址。
`relocate_vectors`部分可能涉及到初始化函数指针或处理异常向量表,这是确保系统启动过程中所需功能正常工作的关键步骤。
另外,文档还提到了如何清除BSS段,BSS(Block Started by Symbol)段通常包含未初始化的数据,这部分也需要在重定位后更新。
总结来说,本文档深入剖析了U-Boot重定位的必要性和具体实现,尤其是在ARM架构下,涉及到代码段的相对跳转、全局变量的绝对地址调整,以及`.rel.dyn`等链接表的管理。这对于理解U-Boot内核启动过程和优化移植工作具有重要的参考价值。
2013-07-09 上传
2019-08-27 上传
点击了解资源详情
点击了解资源详情
2023-11-30 上传
2024-04-09 上传
2024-04-09 上传
2023-05-24 上传
2023-05-19 上传
![](https://profile-avatar.csdnimg.cn/default.jpg!1)
一个闪光点
- 粉丝: 0
- 资源: 1
最新资源
- Hadoop生态系统与MapReduce详解
- MDS系列三相整流桥模块技术规格与特性
- MFC编程:指针与句柄获取全面解析
- LM06:多模4G高速数据模块,支持GSM至TD-LTE
- 使用Gradle与Nexus构建私有仓库
- JAVA编程规范指南:命名规则与文件样式
- EMC VNX5500 存储系统日常维护指南
- 大数据驱动的互联网用户体验深度管理策略
- 改进型Booth算法:32位浮点阵列乘法器的高速设计与算法比较
- H3CNE网络认证重点知识整理
- Linux环境下MongoDB的详细安装教程
- 压缩文法的等价变换与多余规则删除
- BRMS入门指南:JBOSS安装与基础操作详解
- Win7环境下Android开发环境配置全攻略
- SHT10 C语言程序与LCD1602显示实例及精度校准
- 反垃圾邮件技术:现状与前景