U-Boot源代码分析:AT91SAM9260EK版

需积分: 9 11 下载量 168 浏览量 更新于2024-08-01 收藏 308KB PDF 举报
"U-Boot源代码分析 for AT91SAM9260EK,由张俊岭撰写,详细解析了U-boot-1.1.4的初始化、命令处理和Linux系统的引导过程。" U-Boot是一款广泛应用的开源引导加载程序,主要用于嵌入式设备,如基于ARM架构的微处理器。在AT91SAM9260EK开发板上,U-Boot的源代码分析主要涉及以下几个关键方面: 1. **第一阶段(Stage1)**:这一阶段的启动代码位于`cpu/<cputype>/start.s`,主要任务是对CPU进行初始化,包括: - **CPU初始化**:初始化MMU(内存管理单元)、Cache、时钟系统以及SDRAM控制器。这些操作确保了处理器能够正确地管理和访问内存。 - **重定位**:将启动代码从非易失性存储(如Flash)移动到RAM中运行,以便更高效地执行后续操作。 - **分配堆栈空间**:为程序运行分配堆栈,设置堆栈指针,保证程序的正常调用和返回。 - **清零BSS段**:BSS段是未初始化的数据段,初始化时会被清零,确保全局变量在程序开始时拥有预期状态。 - **跳转到第二阶段**:调用`start_armboot()`函数,进入第二阶段的执行。 2. **第二阶段(Stage2)**:第二阶段通常由C语言编写,入口函数为`start_armboot()`。在这个阶段,U-Boot会进行更多的系统级初始化,如设置中断处理、设备检测、网络初始化、串口通信、环境变量处理、以及用户命令接口等。 3. **中断向量表**:在AT91SAM9260EK的`start.s`代码中,可以看到ARM的中断向量表,用于处理不同类型的中断事件,例如未定义指令、软件中断、预取异常、数据异常、IRQ(中断请求)和FIQ(快速中断)。 4. **链接脚本中的全局符号**:在代码中定义了全局符号如`TEXT_BASE`、`armboot_start`、`bss_start`等,它们在链接过程中被用作地址定位,确保程序各个部分正确地在内存中放置。 5. **Linux系统的引导**:U-Boot还负责引导Linux操作系统,这包括识别和加载内核映像,传递参数,以及设置必要的硬件环境,以便Linux内核能够顺利启动。 U-Boot的源代码分析对于理解嵌入式系统的启动流程、设备初始化、以及与硬件交互的细节至关重要。通过深入研究,开发者可以定制U-Boot以满足特定硬件的需求,或者添加新的功能来适应不同的应用场景。这份文档提供了详细的步骤和实例,对于学习和调试U-Boot及其在AT91SAM9260EK上的应用具有很高的实际指导价值。