U-Boot代码解析:从makefile到启动流程

3星 · 超过75%的资源 需积分: 3 8 下载量 35 浏览量 更新于2024-09-14 收藏 284KB DOC 举报
"uboot代码详解 - U-BOOT的Makefile解析及启动流程概述" U-Boot是一款广泛应用的开源引导加载程序,它主要用于嵌入式系统,负责在系统启动时进行基本硬件初始化、加载操作系统映像等任务。本文将深入探讨U-Boot的Makefile配置及其启动流程。 在U-Boot的Makefile中,`at91rm9200dk_config` 是一个特定于平台的配置目标,用于构建针对AT91RM9200DK开发板的配置。`unconfig` 目标则用于清除之前构建过程中生成的配置文件。当执行 `make at91rm9200dk_config` 时,首先会运行 `unconfig` 清理工作,删除包括 `include/config.h` 和 `include/config.mk` 在内的配置文件,确保每次构建都是基于最新的源代码。 `$(MKCONFIG)` 变量指向 `$(SRCTREE)/mkconfig`,即源码树下的 `mkconfig` 脚本。执行 `$(MKCONFIG)$(@:_config=)armarm920tat91rm9200dkNULLat91rm9200` 这个命令,实际上调用了 `mkconfig` 脚本来处理配置。`$(@:_config=)` 内建函数用来移除目标名中的 `_config` 部分,使得最终命令变为 `mkconfig at91rm9200dk arm arm920t at91rm9200dk NULL at91rm9200`,这些参数传递给 `mkconfig` 用于生成特定平台的配置。 U-Boot的启动流程分为两个主要阶段: 1. 第一阶段(Stage 1):通常由汇编语言编写,如`cpu/arm920t/start.S`,这个阶段负责最基本的硬件初始化,例如设置内存控制器、时钟、中断控制器等。此外,它还负责加载第二阶段代码到RAM,并设置初始堆栈。 2. 第二阶段(Stage 2):这是U-Boot的主要部分,由C语言编写。在这个阶段,U-Boot会继续完成更复杂的硬件初始化,如网络、串口、闪存等设备的初始化。同时,它还会提供命令行接口供用户交互,如查看系统信息、烧录固件等。一旦准备就绪,U-Boot将加载并启动操作系统,如Linux。 在U-Boot的启动流程中,每个步骤都至关重要,从配置文件的生成到硬件初始化,再到第二阶段代码的执行,每一个环节都直接影响到系统的正常启动和功能。理解这些过程对于开发者来说是调试和定制U-Boot的基础。通过深入研究U-Boot的源代码,开发者可以更好地适应不同的硬件平台,优化启动性能,以及实现特定的功能需求。