u-boot启动流程深度解析:at91架构入门指南

4星 · 超过85%的资源 需积分: 14 1 下载量 150 浏览量 更新于2024-09-13 收藏 100KB PDF 举报
本文档主要针对u-boot在Atmel架构下的第一阶段启动流程进行了详细分析。随着项目中频繁出现关于u-boot下载地址和烧写地址的问题,这些问题对项目进度产生了负面影响,并意识到深入理解u-boot工作原理的重要性,以便更好地运用这个工具。作者花费一天时间研究,目标是掌握u-boot的启动逻辑和设计理念。 在At91架构中,u-boot启动过程的独特之处在于并非一上电就立即接管,而是先由名为bootstrap的程序接手,然后加载u-boot。bootstrap负责一部分u-boot任务,但具体细节暂且不论。关键点在于bootstrap对u-boot的加载地址,特别是当它将u-boot加载到地址21f00000时,配置项CONFIG_SYS_TEXT_BASE需要设置为相同的值,以确保u-boot的代码从指定位置开始执行。 文章首先提出了问题:u-boot的第一段代码应该位于何处?根据bootstrap,答案是CONFIG_SYS_TEXT_BASE,但这个地址在u-boot的内部结构中找不到对应。u-boot通过/arch/arm/cpu/u-boot.lds文件定义了内存布局和代码执行起点,这一点至关重要。 u-boot.lds文件中的“/开始运行的地方*/ ENTRY(_start)"表明,u-boot的入口点(_start)是由编译器链接时确定的,这决定了代码实际的起始地址。理解这个链接脚本对于确定CONFIG_SYS_TEXT_BASE的设置至关重要,因为它直接影响到u-boot的初始化和功能执行。 尽管已经初步掌握了u-boot第一阶段的启动流程,但作者认识到还有fixrel.dyn段这样的细节尚未完全理解。在这个过程中,作者强调了分析事物时需要分步骤进行,先理解整体框架,再逐渐深入。通过本次分析,作者已能明确配置选项和内存管理的基础,但仍需继续探索更深层次的概念,如动态链接和特定于平台的优化。 总结来说,本文深入剖析了Atmel架构的u-boot启动流程,包括bootstrap的作用、配置项的设置以及u-boot.lds文件在内存布局中的关键作用。尽管存在一些未解之处,但此次分析为作者后续的工作打下了坚实的基础。随着后续的学习和实践,作者将进一步深化对u-boot的理解。