U-Boot启动流程详解:ARM920T _start.S关键解析

4星 · 超过85%的资源 需积分: 10 8 下载量 112 浏览量 更新于2024-09-09 收藏 547KB DOC 举报
本文将深入剖析Linux下U-Boot启动过程,特别关注ARM920T架构下的启动流程。首先,我们从汇编程序"cpu/arm920t/start.S"开始,它是U-Boot的入口点,包含了复位向量代码。复位向量是处理器在上电或系统崩溃后恢复的第一阶段,引导程序会通过它来定位并执行后续的启动代码。 _start函数中的关键步骤包括: 1. 复位向量:通过`reset://复位启动子程序`这部分,U-Boot开始执行实际的复位代码,根据处理器状态进行必要的初始化,如设置CPU的工作模式(SVC32模式),这是为了确保后续操作的安全性。 2. CPU模式切换:通过`mrsr0,cpsr`获取当前寄存器状态,清除标志位以允许系统进入更高级别的服务访问(SVC)模式,并设置适当的权限位。 3. 关闭看门狗:为了防止系统无限制地重启,部分初始化代码仅在系统冷启动时执行,而热重启时则不会触发这部分代码。 4. 代码重定位:当U-Boot需要从RAM而非Flash启动时,会执行`relocate:`段的代码,通过`adr`和`add`指令将U-Boot的代码和数据重新定位到RAM的指定区域,以优化性能。 5. 内存管理和堆栈设置:接下来,程序检查当前位置与预定义的内存区域(如`_TEXT_BASE`和`CFG_MALLOC_LEN`),计算出堆栈和内存分配空间的位置,然后执行`copy_loop`来复制U-Boot的代码和数据到新的地址,同时初始化堆栈以支持后续程序执行。 6. 栈设置:通过`stack_setup`,程序设置堆栈边界和大小,以确保正确的函数调用和局部变量管理。 在整个启动过程中,汇编语言被广泛使用,因为它们对硬件资源的控制更为精细,可以高效地利用ARM920T处理器特性。理解U-Boot的启动过程对于开发嵌入式Linux系统、优化启动时间以及处理异常情况至关重要。通过分析这段代码,我们可以了解到基础的系统启动机制,这对于硬件开发者和系统工程师来说是一项必备技能。