U-Boot启动流程解析:从Flash到RAM的转变

5星 · 超过95%的资源 需积分: 9 14 下载量 118 浏览量 更新于2024-09-13 收藏 252KB PDF 举报
"U-Boot启动流程,Uboot 2440" U-Boot是一款广泛使用的开源引导加载程序,主要用于嵌入式系统。在开发板上电后,它执行的第一条指令是位于`cpu/arm920t/start.o`中的代码,这个文件包含了针对ARM920T处理器的初始化代码。U-Boot的启动流程可以分为两个主要阶段。 **第一阶段:** 1. **入口程序:**启动流程始于`cpu/arm920t/start.S`,这是一个汇编语言程序,其 `_start` 标签是复位向量的入口点。复位向量通常包含一系列的异常处理程序,如未定义指令、软件中断、预取指异常和数据异常等。这些异常向量的设定是确保系统在遇到错误时能正确响应。 ```assembly _start: b reset // 复位向量 ldr pc, _undefined_instruction ldr pc, _software_interrupt ldr pc, _prefetch_abort ... ``` 接下来,`reset` 子程序将进行CPU模式的设置,例如切换到服务模式(SVC32),关闭看门狗定时器,以及进行其他必要的硬件初始化。 2. **代码重定位:**如果U-Boot是从Flash启动,启动代码会检查当前运行的位置,并可能执行代码的重定位过程。通过将代码从ROM复制到RAM中,这允许U-Boot在RAM中运行,提供更快的执行速度和对RAM资源的直接访问。 **第二阶段:** 1. **初始化堆栈:**在代码成功重定位后,U-Boot会设置堆栈,以便进行后续的函数调用和数据存储。 2. **系统配置:**U-Boot会继续初始化系统,包括但不限于设置内存控制器、初始化时钟、挂载设备驱动、检测和初始化外部存储器(如SD卡、NAND Flash等)。 3. **环境变量:**读取和验证保存在非易失性存储中的环境变量,如网络配置、启动参数等。 4. **用户交互:**显示欢迎信息并进入命令行界面,等待用户输入命令或执行预设的启动脚本。 5. **加载操作系统:**最后,U-Boot会根据用户输入或配置加载操作系统内核,如Linux,将其加载到内存的指定位置,并跳转到内核的入口点,从而完成启动过程。 U-Boot的启动流程是嵌入式系统启动过程的关键部分,确保了硬件的正确初始化和操作系统的顺利加载。理解这一流程对于调试和优化嵌入式系统的启动性能至关重要。