U-boot-1.1.4 初始化与Linux引导分析

需积分: 10 2 下载量 129 浏览量 更新于2024-10-21 收藏 307KB PDF 举报
"U-boot源代码分析 (for AT91SAM9260EK) - 张俊岭" 本文档深入探讨了U-boot-1.1.4版本在AT91SAM9260EK开发板上的工作原理,主要包括三个关键部分:初始化过程、命令处理过程以及Linux系统的引导过程。首先,我们来详细分析这些环节。 1. 第一阶段(Stage1) 第一阶段的启动代码位于`cpu\<cputype>\start.s`,它负责初始化CPU的关键硬件组件,包括: - CPU自身初始化:对MMU(内存管理单元)、Cache、时钟系统以及SDRAM控制器进行设置,确保系统运行环境稳定。 - 重定位:将U-boot代码从非易失性存储器(如ROM)复制到RAM中,以便更快地执行后续操作。 - 分配堆栈空间:为程序运行提供必要的栈空间,并设置堆栈指针SP。 - 清零BSS数据段:初始化未被显式初始化的数据区域,确保程序开始时所有变量均以零值开始。 - 跳转到第二阶段:调用函数`start_armboot()`,这是U-boot启动流程的下一阶段。 在AT91SAM9260EK上,这个阶段的实现代码在`cpu\arm926ejs\start.s`,其中包含了一个简单的中断向量表,用于处理各种异常和中断情况。 2. 第二阶段(Stage2) 第二阶段的入口函数是`start_armboot()`,它主要负责以下任务: - 设置硬件环境:进一步配置系统,如设置GPIO、串口、看门狗定时器等。 - 执行板级初始化:根据特定开发板的需求进行初始化,如外设连接、I/O配置等。 - 初始化内存管理:设置内存分区和映射,为后续的操作系统加载做准备。 - 加载环境变量:读取并解析存储在闪存中的环境变量,这些变量控制U-boot的行为。 - 执行命令行接口:使用户能够通过串口输入命令,进行设备检测、网络通信、文件系统操作等。 - 引导加载器:查找并加载Linux内核映像,通常从NAND Flash或通过网络获取。 3. Linux系统的引导 U-boot引导Linux系统的过程涉及以下步骤: - 验证内核映像:检查内核的校验和,确保其完整无误。 - 配置参数传递:将必要的参数(如内存大小、启动设备等)传递给Linux内核。 - 调用内核入口点:跳转到内核代码的入口,通常是一个汇编语言的函数,如`start_kernel()`。 - 内核初始化:Linux内核开始自身的初始化过程,包括设备驱动、文件系统、网络子系统等。 总结,U-boot作为嵌入式系统的预启动加载器,其源代码分析对于理解嵌入式系统的启动流程和硬件初始化至关重要。通过深入理解U-boot的各个阶段,开发者可以更好地定制和优化引导加载器,以适应特定硬件平台和应用需求。