U-Boot详解:Stage1与Stage2结构及启动流程

需积分: 0 11 下载量 53 浏览量 更新于2024-07-31 收藏 225KB PDF 举报
本文档深入解析了U-Boot bootloader的基本结构和启动流程,特别关注了stage1和stage2两个关键部分。在U-Boot中,bootloader通常被划分为两个阶段,以充分利用不同的编程语言和功能特性。 stage1,也就是start.S文件,主要用汇编语言编写。这个阶段的代码负责基本的引导过程,包括: 1. **入口点设置**:因为必须在ROM(Flash)的0x0地址有一个全局入口,编译器需要知道这一点,通过修改连接器脚本实现。 2. **异常向量设置**:确保处理器能够正确处理各种中断和异常情况。 3. **硬件配置**:如CPU速度、时钟频率和终端控制寄存器的初始化。 4. **内存管理**:初始化内存控制器,为后续操作提供可用内存空间。 5. **程序加载**:将ROM中的代码复制到RAM中,以便从内存执行。 6. **堆栈初始化**:为程序的运行提供必要的栈空间。 7. **跳转到RAM执行**:通过ldrpc指令将控制权转移到RAM的执行区。 另一方面,stage2以C语言为主,位于lib_arm/board.c的startarmboot函数中,它承担着更高级的功能: 1. **初始化流程**:调用一系列初始化函数,包括硬件设备(如Flash和NAND设备)的初始化。 2. **内存管理**:配置系统内存分配函数,确保程序能有效地访问内存。 3. **设备驱动**:针对特定系统配置,如显示设备和网络设备的初始化,设置IP地址和MAC地址。 4. **命令循环**:进入一个命令处理循环,接收用户的串口输入,执行相应的操作,如系统配置或执行命令行工具。 在实际的启动过程中,U-Boot会按照特定顺序执行这些代码,例如对于ARM920T架构的CPU,可能会从cpu/arm920t/start.S文件开始。这个阶段定义了异常向量表,确保引导过程的稳定性和可靠性。 总结来说,U-Boot的启动过程是一个精心设计的序列,从基本的硬件配置和内存管理,到高级的设备初始化和用户交互,每个阶段都有其特定的责任,共同构建了一个稳定且灵活的系统启动框架。理解这个框架对于开发基于U-Boot的嵌入式系统至关重要。