AT91SAM9260EK U-Boot 1.1.4 初始化深度解析

4星 · 超过85%的资源 需积分: 10 5 下载量 140 浏览量 更新于2024-07-27 收藏 209KB PDF 举报
本文档深入剖析了U-Boot源代码的初始化过程,主要针对的是AT91SAM9260EK开发板,使用的U-Boot版本为1.1.4。在U-Boot的启动流程中,初始化是至关重要的第一阶段,通常称为Stage1。这个阶段的代码主要集中在cpu目录下的cputype子目录,例如`cpu/arm926ejs/start.S`。 在这个阶段,核心任务有: 1. **CPU自身初始化**:这部分代码负责配置MMU(Memory Management Unit),内存管理单元用于保护内存区域,提高内存访问效率;此外,还包括Cache(高速缓存)的初始化,以提升数据读取速度;对时钟系统进行设置,确保处理器的时序正确;以及SDRAM控制器的初始化,确保内存与处理器之间的有效通信。 2. **重定位**:源代码将固件从非易失性存储器(如Flash或NAND Flash)转移到RAM(Random Access Memory)中,这是为了提高启动速度和响应性,因为RAM的访问速度远快于闪存。 3. **堆栈空间分配和设置**:堆栈是程序执行过程中临时数据存储的地方,堆栈指针的设置对于防止栈溢出和保持程序控制流至关重要。 4. **清零BSS数据段**:BSS(Block Started by Symbol)是编译器创建的一个未初始化的数据区域,通过清零操作确保所有BSS区域的值都是0。 5. **跳转到第二阶段入口**:完成上述初始化后,程序会调用`start_armboot()`函数,这是一个标志性的函数,标志着从第一阶段向第二阶段(Stage2)的过渡,后者通常处理更复杂的设备驱动加载、命令行解析等工作。 对于AT91SAM9260EK来说,启动代码的精简示例展示了向量表的定义,向量表用于存储处理器异常处理程序的地址。这些异常包括未定义指令、软件中断、预取错误、数据错误、未使用的中断、常规中断和快速中断等。向量表中的地址通常由硬件自动填充,但也可以根据需要进行修改。 本文提供了对U-Boot源代码在启动时如何进行初始化的深入理解,有助于开发者更好地掌握该内核启动过程,并可能在定制或优化特定硬件平台的U-Boot配置时提供参考。