U-Boot在mini2440板上的启动流程详解

需积分: 10 0 下载量 58 浏览量 更新于2024-09-12 收藏 60KB DOC 举报
U-Boot启动流程是在嵌入式开发板如Mini2440上引导操作系统的关键步骤,它涉及一系列复杂的指令和硬件交互。当开发板上电后,执行的第一条U-Boot指令引导了整个启动过程。本文将详细阐述U-Boot的启动过程分为两个阶段,并重点讲解第一个阶段——cpu/arm920t/start.S汇编程序。 首先,启动从cpu/arm920t/start.S汇编程序的_start:段开始,这是U-Boot的入口点。复位向量(reset vector)是程序的起始点,它处理系统刚上电时的初始化操作。接着是一系列中断向量表的设置,用于捕获和处理不同类型的异常,如未定义指令、软件中断、预取异常、数据访问异常以及未使用的中断。 在复位启动子程序中,通过读取并修改CPSR寄存器来设置CPU的工作模式为SVC32(Supervisor mode with execute permissions),这是一种安全级别较高的模式,确保后续操作的安全性。同时,会关闭看门狗定时器,防止在启动过程中出现意外的重启。 接下来,_relocate:段执行重定位代码,因为U-Boot可能存储在闪存中,需要将其加载到RAM以便运行。通过比较当前代码位置(r0)与RAM地址(_TEXT_BASE),决定是继续执行还是进行重定位。如果在RAM中,则跳过这部分代码,直接进入常规启动流程。 如果需要重定位,程序会计算要复制的代码范围,从.armboot_start到_bss_start,然后执行copy_loop循环,逐字节地将代码从Flash复制到RAM的适当位置。当复制结束,会初始化堆栈和其他必要的内存区域,确保程序在RAM环境中正常运行。 最后,在stack_setup:段,U-Boot的主体代码被加载到预设的_text_base地址(通常是RAM的前128千字节),然后U-Boot继续执行其初始化和配置任务,包括加载内核、设备驱动和其他配置数据,最终引导操作系统。 U-Boot启动流程展示了嵌入式系统中如何利用特定的硬件架构(如ARM920T)和链接脚本(u-boot.lds)来管理和初始化处理器,确保在不同内存类型(Flash或RAM)上的可靠启动。这不仅是硬件开发者理解嵌入式系统启动过程的基础,也是移植和优化U-Boot到不同平台的重要环节。