Uboot功能
Uboot
功能
Uboot(Universal bootloader)
就是一个裸机程序,用于启动内核。不过相较于单片机程序更加复杂
相关知识补充
Uboot:Universal bootloader
XIP
:CPU
可以直接发出地址信号读取Flash/RAM
,执行指令(可以看成直接在Flash/RAM
中运行);此类Flash/RAM
称为XIP
设备
非XIP
:有时程序从SD
卡启动,CPU
无法直接读取SD
卡,需要通过emmc
控制器访问SD
卡。则SD
卡为非XIP
设备
启动过程
-
运行
Uboot
,目的是启动内核:读Flash
,将内核代码拷贝到RAM
带来了一个问题,一般单片机的RAM
使用的是SRAM
,比较小,无需初始化即可使用。而嵌入式Linux
的内存一般比较大,使用DDR
。那么就需要初始化内存。
Uboot
的工作- 初始化内存
- 初始化其他硬件:初始化时钟,然后是
Flash
- 将内核拷贝到
RAM
- 启动内核
-
启动内核:目的是为了启动应用程序
内核的工作:- 能
R/W
硬件驱动,比如Flash
(U盘,网络,LCD
,输入输出设备)驱动程序 - 能
R/W
文件,文件系统 - 找到启动APP
- 能
-
为了适配所有设备,防止引入许多冗余的配置文件,在
Uboot
中引入设备树。文件目录中有一个dtb
文件夹
Uboot = Uboot.bin + 某个dtb文件
支持非XIP
设备启动(SD
卡启动,串口启动)的过程
由于CPU
无法直接从SD
卡(非XIP
设备)读到程序(指令),但是当前又需要CPU
从SD
卡启动程序。出现了矛盾,因此引入了BRom(BootRom)
-CPU
可以直接访问。
完整启动过程:
- CPU读
BootRom
,运行BootRom
代码 BootRom
工作:Copy
:将SD
卡上的Uboot
拷贝到RAM
运行
总结
Uboot启动流程
XIP设备
CPU
直接访问Flash
,读取Uboot
代码并执行(相当于直接再FLASH
上运行):初始化内存,初始化硬件,将Flash上的内核代码拷贝到RAM。启动内核
非XIP设备
- 首先
CPU
执行BootRom
代码,将SD
卡(非XIP
)上的Uboot
拷贝到RAM
- 执行
Uboot
代码:初始化硬件(不再初始化内存,程序本身就在RAM
中),将Flash
上的内核代码拷贝到RAM
。启动内核
分类:
Linux学习
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek “源神”启动!「GitHub 热点速览」
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 2 本地部署DeepSeek模型构建本地知识库+联网搜索详细步骤