U-Boot启动流程解析与SPL演进
需积分: 10 134 浏览量
更新于2024-09-07
收藏 187KB PDF 举报
"U-Boot启动顺序文档详细阐述了U-Boot在ARM平台上的启动流程,包括SPL(Small Program Loader)和U-Boot主程序的启动步骤、近期的改动以及未来的发展计划。该文档适合于正在开发或研究U-Boot启动流程的人员参考学习。"
U-Boot启动顺序:
U-Boot的启动过程分为两个主要阶段:SPL和U-Boot主程序。
1. SPL启动序列:
- 启动开始:当系统加电后,CPU开始执行ROM中的固件代码。
- CPU栈设置:初始化CPU栈,为后续处理做准备。
- board_init_f_mem:这个函数用于早期内存的配置,它会初始化全局数据结构(gd)和早期内存分配(earlymalloc)。
- jump加载U-Boot:SPL加载并跳转到完整的U-Boot映像。
- spl_board_init:执行特定板级的初始化任务。
- board_init_r:在DRAM中设置栈,并继续执行剩余的初始化工作。
- dram_init:初始化DRAM控制器,确保内存可用。
- board_init_f:完成板级的剩余初始化。
2. U-Boot主程序启动序列:
- crt0.s:通用的启动代码,用于设置C环境。
- driver model接管:驱动模型接手初始化工作,简化了对一些初始化序列的调用。
- main_loop:进入U-Boot的主要循环,等待用户输入命令。
近期的改动:
- SPL中引入了board_init_f_mem函数,用于在board_init_f之前进行最小化处理,不包含DRAM初始化。
- 减少board_init_f之前的步骤,改为正常返回,而不是跳转到board_init_r。这样等到DRAM初始化完成后,再重新定位栈(通过CONFIG_SPL_STACK_R配置)。
未来的宏大计划:
- 对于SPL,目标是让所有板子都使用一个通用的board_init_f函数,将特定板级的初始化移到board_early_init_f或其他类似函数中,以减少代码量。
- 对于U-Boot主程序,计划逐步淘汰更多初始化函数,简化启动过程,同时默认的printf实现也将变得更小,以优化性能。
这个文档对于理解U-Boot的启动流程及其演变至关重要,对于嵌入式系统开发者和Linux驱动开发者来说,是一份有价值的参考资料。通过掌握这些知识,可以更有效地调试和优化U-Boot,以适应不同的硬件平台和应用场景。
5001 浏览量
375 浏览量
2021-10-18 上传
278 浏览量
106 浏览量
217 浏览量
2023-06-07 上传
2023-06-07 上传
224 浏览量
1290 浏览量
dhw_dhw_dhw
- 粉丝: 1
最新资源
- 易语言实现百度短网址的POST方法
- Lyo:轻松实现Node.js模块到浏览器的转换
- Upptime监控页面:开源正常运行时间监控与状态
- SpringBoot整合响应式框架实现高并发Web应用开发教程
- Python nbimporter:弃用从IPython笔记本导入模块的实践
- CS331课程实践:掌握数据结构和算法
- 单片机LED显示用字库文件压缩包解析
- 易语言实现淘宝邮箱批量绑定自动化操作指南
- C#练习项目集:提升编程技能
- C# 实现Windows定时服务的创建与发布指南
- MATLAB软件包助力光学镜头SFR计算
- 数学建模在自来水管系统中的应用代码解析
- 开源数字命理计算器:Mac OS X 上的生活信息解析
- 当当网JS焦点图广告代码实现与解析
- 易语言实现UDP内网P2P交互技术详解
- 易语言BE5.0游侠源码深度解析与应用