文章目录
uboot基础概念
1.为什么要有uboot?
- 预备知识
- 计算机系统运行时的主要核心部件包含3个东西:CPU+外部存储器+内部存储器
- PC机启动过程为:PC上电后先执行BIOS程序(实际上PC 的BIOS就是NorFlash),BIOS负责初始化DDR内存和硬盘,然后从硬盘上将OS镜像读取到DDR中,然后跳转到DDR中去执行OS直到启动(OS启动后BIOS就无用了)
- uboot主要作用是用来启动操作系统内核,部署整个计算机系统,有操作Flash等板子上硬件的驱动,提供一个命令行界面供人操作
- uboot程序部署在能作为启动设备的Flash做上,OS部署在Flash上,内存在掉电时无作用,CPU在掉电时不工作
- 嵌入式系统上电后先执行uboot、然后uboot负责初始化DDR,初始化Flash,然后将OS从Flash中读取到DDR中,然后启动OS(OS启动后uboot就无用了)
2. uboot必须解决的问题
-
自身可开机直接启动
-
必须根据具体的SoC的启动方式来设计uboot
-
uboot必须进行和硬件相对应的代码级别的更改和移植,才能保证响应启动介质的启动,uboot中第一阶段的start.S文件中处理了这一块
-
-
能够引导操作系统内核启动并给内核传参
- 我们可以在uboot中事先给Linux内核准备一些启动参数放在内存中特定位置然后传给内核,内核启动后会到这个特定位置去取uboot传给他的参数,然后内核解析这些参数
-
能提供系统部署功能
- uboot必须能够被人借助而完成整个系统在Flash上的烧录下载工作(裸机在刷机时就是利用uboot中的fastboot功能将各种镜像烧录到iNand中,然后从iNand启动)
-
能进行SoC级和板级硬件管理
- uboot中实现了一部分硬件的控制能力,因为uboot为了完成一些任务必须让一些硬件工作。譬如uboot要在刷机时LCD上显示进度条就必须驱动LCD。
- SoC级就是SoC内部外设,板级就是SoC外面开发板上面的硬件
-
uboot存在生命周期
- uboot本质上是一个裸机程序,一旦uboot开始SoC就会单纯运行uboot,一旦uboot结束运行就无法再回到uboot
- uboot入口为开机自动启动;出口为启动内核
3. uboot的工作方式
- 从裸机程序镜像uboot.bin说起
- uboot的本质就是一个裸机程序,和裸机教程中的裸机程序xx.bin没有本质区别,区别主要在于文件大小,uboot在180k-400k之间
- uboot本身为一个开源项目,由若干个.c文件和.h文件组成,配置编译之后会生成一个uboot.bin,这就是uboot这个裸机的镜像文件。然后镜像文件被合理的烧录到启动介质中拿去给SoC启动,即uboot在没有运行时表现为uboot.bin
- uboot运行时会被加载到内存中,然后逐次拿给CPU去运行
- uboot的命令式shell