U-boot源代码分析 for AT91SAM9260EK

需积分: 35 12 下载量 84 浏览量 更新于2024-09-21 1 收藏 307KB PDF 举报
"U-boot源代码分析 (for AT91SAM9260EK) - 张俊岭" 本文档深入剖析了U-boot-1.1.4在AT91SAM9260EK开发板上的运行机制,主要包括三个主要阶段:第一阶段(Stage1)、第二阶段以及Linux系统的引导过程。 **第一阶段(Stage1)** 第一阶段的启动代码位于`cpu/<cputype>/start.s`,它的任务是: 1. **CPU初始化**:对CPU自身的各项功能进行设置,如MMU(内存管理单元)、Cache、时钟系统和SDRAM控制器的初始化。 2. **重定位**:将启动代码从非易失性存储器(如ROM或闪存)移动到RAM中执行,以便更高效地运行。 3. **分配堆栈空间**:为后续程序执行提供工作区域,并设置堆栈指针。 4. **清零BSS段**:BSS段包含未初始化的全局变量和静态变量,启动时将其清零。 5. **跳转到第二阶段入口**:调用`start_armboot()`函数,进入第二阶段的执行。 对于AT91SAM9260EK,其启动代码位于`cpu/arm926ejs/start.s`,示例代码展示了如何设置ARM的中断向量表,并定义了各个中断处理函数的地址。 **第二阶段(Stage2)** 第二阶段由`start_armboot()`函数开始,这个阶段负责更多的系统初始化工作,包括: 1. **硬件设备初始化**:如串口、网络接口、存储器等。 2. **环境变量设置**:读取并解析配置文件,设置U-boot的运行参数。 3. **命令处理**:实现U-boot命令行界面,用户可以在此阶段进行各种操作,如加载映像文件、配置网络、查看硬件信息等。 4. **加载操作系统**:准备并加载Linux内核到内存中,准备进入操作系统运行。 **Linux系统的引导过程** U-boot在第二阶段完成后,会调用特定的函数来加载Linux内核。这通常涉及解压和校验内核映像,然后跳转到内核的入口点,开始Linux的初始化。 在AT91SAM9260EK上,U-boot会配置SDRAM控制器以正确地加载内核到SDRAM中,并设置其他必要的硬件状态,如中断控制器和时钟。当一切就绪后,通过跳转到内核的入口点`_start`,启动Linux内核的执行。 总结来说,这份文档提供了对U-boot在特定硬件平台上的源代码分析,对于理解嵌入式系统的启动流程、U-boot的内部工作机制以及如何与Linux内核交互有极大的帮助。对于开发者来说,这是一份宝贵的参考资料,有助于在实际项目中优化和定制U-boot以满足特定需求。