AT91SAM9260EK板U-boot-1.1.4源代码分析

4星 · 超过85%的资源 需积分: 10 5 下载量 139 浏览量 更新于2024-07-27 1 收藏 307KB PDF 举报
"U-boot源代码分析 (for AT91SAM9260EK) - 张俊岭" 本文档深入探讨了U-boot-1.1.4在AT91SAM9260EK开发板上的运行流程,主要分为三个部分:初始化过程、命令处理过程以及Linux系统的引导过程。AT91SAM9260EK是一款基于ARM926EJS内核的微处理器,广泛应用于嵌入式系统。 ### 第一阶段(Stage1) Stage1的启动代码位于`cpu/<cputype>/start.s`,在这个阶段,主要任务有: 1. **CPU自身初始化**:对CPU的核心功能进行设置,如MMU(内存管理单元)、Cache、时钟系统和SDRAM控制器。这些初始化确保了硬件系统的稳定运行。 2. **重定位**:将U-boot从非易失性存储(如ROM或Flash)复制到RAM中,以便于更快的执行。 3. **分配堆栈空间**:为程序运行分配堆栈,设置堆栈指针,确保函数调用和异常处理时能正常保存和恢复上下文。 4. **清零BSS数据段**:BSS段通常存放未初始化的全局变量,启动时清零确保了这些变量在程序开始时都是已知状态。 5. **跳转到第二阶段**:执行完上述步骤后,程序跳转到`start_armboot()`入口函数,这是Stage2的起点。 对于AT91SAM9260EK,其启动代码在`cpu/arm926ejs/start.s`中,展示了一部分简化后的汇编代码,包括定义中断向量表和一些全局符号。 ### 第二阶段(Stage2) 第二阶段的执行从`start_armboot()`开始,这个阶段通常包括: 1. **更多硬件初始化**:继续完成硬件的初始化,如串口、GPIO、定时器等。 2. **环境变量设置**:加载或初始化U-boot的环境变量,这些变量用于配置启动行为和系统参数。 3. **内存检测**:检测系统内存的可用性和性能。 4. **设备树初始化**:处理设备树信息,这在现代的U-boot中用于描述硬件配置。 5. **命令行接口**:启动命令行界面,用户可以通过输入命令来交互操作U-boot。 ### 命令处理过程 U-boot提供了丰富的命令集,包括加载映像文件、网络操作、磁盘I/O等。用户可以在这个阶段执行`bootcmd_script`或手动输入命令来控制启动流程。 ### Linux系统的引导过程 引导Linux系统通常涉及以下步骤: 1. **加载内核映像**:U-boot通过网络、串口、USB或SD卡等方式加载Linux内核到内存中。 2. **传递参数**:设置内核启动参数,例如设备树 blob、内存大小等。 3. **跳转到内核入口点**:一旦内核被加载,U-boot将控制权交给Linux内核,执行内核的初始化代码。 ### 结论 U-boot在AT91SAM9260EK上的实现展示了嵌入式系统启动的复杂性和灵活性。理解其源代码有助于开发者调试、定制和优化引导加载程序,从而更好地控制和利用硬件资源。