U-Boot移植详解:阶段划分与交叉编译环境构建

需积分: 9 3 下载量 120 浏览量 更新于2024-07-20 收藏 340KB DOC 举报
本文档详细记录了U-Boot(Unified Bootloader,统一引导加载器)的移植过程笔记,着重介绍了U-Boot启动流程的两个关键阶段——stage1和stage2,以及如何在不同的硬件平台上进行移植。 首先,stage1作为启动的第一阶段,主要涉及CPU体系结构级的操作,使用汇编语言编写。它执行的关键任务包括: 1. 定义内核入口点,这是引导和加载内核的基础。 2. 设置CPU工作模式,确保正确的运行环境,如设置为svc模式,配置时钟速度和中断控制。 3. 初始化异常向量表,处理处理器异常情况。 4. 内存控制器设置,关闭MMU和数据缓存,确保内存管理的正确性。 5. 关闭Watchdog定时器和系统时钟。 6. 将ROM中的stage2代码复制到RAM中,便于后续执行,通过调用特定板级初始化函数来完成。 7. 设置堆栈,为接下来的代码执行提供内存空间。 8. 最后,通过ldrpc指令将控制权交给stage2的C语言入口点`start_armboot`。 stage2则进入了更高级别的初始化过程,由C语言编写,主要包括: 1. 调用一系列初始化函数,如CPU初始化、系统时钟设置、定时器配置、环境参数和串口控制台的初始化,以及内存映射检测。 2. 初始化Flash设备,如NORFLASH,这是存储引导文件和内核的地方。 3. 设置系统内存分配函数和环境变量的relocation,保证系统变量在正确的位置。 4. 如果系统包含NAND设备,会进行NAND设备的初始化。 5. 对于支持的显示设备,也会进行相应的初始化。 6. 网络设备的初始化,包括IP地址和MAC地址的设置。 7. 最终,调用`main_loop`,进入命令循环,接收用户输入并执行相应的操作。`main_loop`处理的是通用的命令交互逻辑,与特定平台无关。 在整个移植过程中,关键步骤包括建立交叉编译环境,这通常使用`arm-linux-gcc`或cross-tools包,需要按照特定的安装指南配置环境变量,以便在目标架构上编译和链接U-Boot代码。 总结来说,这篇笔记提供了U-Boot移植的核心技术细节,涵盖了从硬件初始化到软件配置的全方位流程,对于理解和实现不同平台上的U-Boot定制有着重要的参考价值。