本文就
uboot
必须要解决的问题进行分析
文章目录
Part1:能自身开机直接启动
-
一般的
SoC
都支持多种方式启动,譬如SD卡
启动、NorFlash
启动、NandFlash
启动等……uboot
要能够开机启动,必须根据具体的SoC
的启动设计来设计uboot
-
uboot
必须进行和硬件相对应的代码级别的更改和移植,才能够保证可以从相应的启动介质启动uboot
中第一阶段的start.S
文件就是具体处理了这一块
Part2:能引导操作系统内核启动并给内核传参
-
uboot
的终极目标就是启动内核 -
Linux
内核在设计的时候,设计为可以被传参也就是说我们可以在
uboot
中事先给Linux
内核准备一些启动参数放在内存中特定的位置然后传给内核
内核启动后会到这个特定的位置去取uboot
传给它的参数
然后在内核中解析这些函数
这些函数将来被用来指导Linux
内核的启动过程
Part3:能提供系统部署功能
-
uboot
必须能够被人借助而完成整个系统在Flash上的烧录下载工作整个系统包括
uboot
、kernel
、rootfs
等的镜像 -
裸机中刷机就是利用
uboot
中的fastboot功能
将各种镜像烧录到iNand
中,然后从iNand
启动
Part4:能进行SoC级和板级硬件管理
-
uboot
中实现了一部分硬件的控制能力(uboot
中初始化了一部分硬件,譬如 鼠标、键盘)
因为uboot
为了完成一些任务必须让这些硬件工作譬如
uboot
要实现刷机必须能驱动iNand
譬如uboot
要在刷机时LCD
上显示进度条就必须能驱动LCD
譬如uboot
能够通过串口提供操作界面就必须驱动串口
譬如uboot
要实现网络功能就必须驱动网卡芯片 -
SoC
级(譬如串口)就是SoC
内部外设SoC
:System of Chip
,片上系统 -
板级就是
SoC
外面开发板上面的硬件(譬如 网卡、iNand
)
Part5:uboot的生命周期
生命周期:
uboot
什么时候开始运行,什么时候结束运行
本质:
uboot
是一个裸机程序(不是操作系统)
- 一旦
uboot
开始,SoC
就会单纯运行uboot
通俗点讲:
uboot
运行的时候别的程序是不可能同时运行的 - 一旦
uboot
结束运行则无法再回到uboot
所以
uboot
启动了内核后,uboot
本身就死了,要想再次看到uboot
界面只能重启系统
重启并不是复活了刚才的uboot
,重启只是uboot
的另一生
入口和出口:
-
uboot的入口就是开机自动启动
-
uboot的唯一出口就是启动内核
-
uboot还可以执行很多别的任务(譬如烧录系统)
其他任务执行完后都可以回到
uboot
的命令行下继续执行uboot
命令
而启动内核命令一旦执行就回不来了