U-boot-1.1.4源代码分析:AT91SAM9260EK版

5星 · 超过95%的资源 需积分: 35 6 下载量 58 浏览量 更新于2024-07-29 收藏 307KB PDF 举报
"U-boot源代码分析文档,针对AT91SAM9260EK板,解析了U-boot-1.1.4的初始化、命令处理和Linux引导流程。" U-boot是Bootloader的一种,它是嵌入式系统启动时运行的第一段软件代码,负责初始化硬件环境,加载操作系统内核,并将控制权传递给操作系统。本文档详细分析了U-boot的三个关键阶段,主要针对基于AT91SAM9260EK开发板的实现。 1. **第一阶段(Stage1)** 第一阶段的启动代码位于`cpu\<cputype>\start.s`,这是汇编语言编写的,其主要任务包括: - **CPU初始化**:对CPU自身的特性进行配置,如MMU(内存管理单元)、Cache、时钟系统以及SDRAM控制器等。 - **重定位**:将启动代码从非易失性存储(如Flash)复制到RAM中执行,提高运行速度。 - **分配堆栈**:为程序执行分配堆栈空间并设置堆栈指针。 - **清零BSS段**:BSS段存储未初始化的全局和静态变量,初始化时将其清零。 - **跳转到第二阶段**:执行完毕后,跳转到`start_armboot()`函数,这是第二阶段的入口。 在AT91SAM9260EK的实现中,`cpu\arm926ejs\start.s`的代码展示了具体的实现,包括设置中断向量表和一些全局符号定义。 2. **第二阶段(Stage2)** 第二阶段的代码主要由C语言编写,`start_armboot()`函数在这里开始执行。这个阶段的任务更复杂,包括硬件的进一步初始化、设备检测、网络和串口初始化、执行U-boot命令以及加载Linux内核。 - **硬件初始化**:继续对更多外围设备进行初始化,如串口、网络接口、GPIO等。 - **设备树初始化**:可能涉及到设备树 blob 的加载和解析,以配置硬件资源。 - **命令处理**:U-boot支持命令行交互,用户可以输入命令进行各种操作,如查看系统信息、擦写Flash、网络传输等。 - **加载Linux内核**:通过某种方式(如从网络或本地存储)获取Linux内核镜像,并将其加载到内存的特定位置。 3. **Linux引导过程** - **设置参数**:U-boot会准备Linux内核所需的启动参数,比如设备树、内存信息等。 - **跳转到内核**:最后,U-boot将控制权传递给Linux内核,启动内核初始化过程。 通过这样的分析,开发者能够深入理解U-boot的工作原理,从而更好地调试和定制Bootloader,满足特定项目的需求。对于AT91SAM9260EK这样的嵌入式平台,了解这些细节对于开发和维护工作至关重要。