U-boot-1.1.4初始化与引导分析(AT91SAM9260EK)

需积分: 35 1 下载量 158 浏览量 更新于2024-10-30 收藏 307KB PDF 举报
"U-boot源代码分析文档,主要针对AT91SAM9260EK板,详析U-boot-1.1.4的初始化、命令处理和Linux引导流程。作者张俊岭,版本1.0,发布日期2007-11-8。文档内容涵盖CPU初始化、代码重定位、堆栈设置、BSS段清零以及进入第二阶段的start_armboot()函数等。" 在深入理解U-boot源代码的过程中,首先我们要关注的是U-boot的启动流程,这通常分为两个阶段: 1. 第一阶段(Stage1): 这一阶段的启动代码位于`cpu\<cputype>\start.s`,主要任务是对CPU进行基本配置,包括但不限于: - CPU自身初始化:对MMU(内存管理单元)、Cache、时钟系统以及SDRAM控制器进行初始化,确保硬件环境的稳定。 - 重定位:代码从非易失性存储器(如ROM或Flash)复制到RAM中运行,提高执行效率。 - 分配堆栈空间并设置堆栈指针SP,确保程序运行时有正确的上下文。 - 清零BSS数据段:未初始化的全局变量区域在程序启动前被清零。 - 最后,通过跳转到`start_armboot()`函数,进入第二阶段。 在AT91SAM9260EK的特定实现中,启动代码位于`cpu\arm926ejs\start.s`。文档中给出的部分代码展示了ARM的中断向量表设置,以及`_start`函数的定义,这是程序执行的起点。向量表定义了处理器遇到不同异常或中断时应跳转的处理程序地址。 2. 第二阶段(Stage2): `start_armboot()`是第二阶段的入口,它通常包含更多高级的初始化任务,如设备检测、初始化、网络配置、环境变量处理、文件系统操作等。此外,这一阶段还会处理用户输入的命令,支持如加载kernel映像、设备树 blob等操作。最终,U-boot将引导Linux内核启动,通过传递参数并将控制权交给内核。 分析U-boot源代码对于理解和定制嵌入式系统的启动过程至关重要,尤其是在调试硬件问题、优化引导速度和添加新功能时。通过对每个阶段的深入理解,开发者可以更有效地定位问题,优化代码,以及适应不同硬件平台的需求。