Part1:裸机程序镜像
-
uboot
本身是一个开源项目,由若干个.c
和.h
文件组成 -
配置编译之后会生成一个
uboot.bin
,这就是uboot
这个裸机程序的镜像文件 -
然后这个镜像文件被合理的烧录到启动介质中拿给
SoC
去启动
uboot
在没有运行时表现为uboot.bin
,一般躺在启动介质里
uboot
运行时会被加载到内存中,然后一条指令一条指令的拿给CPU
去运行
Part2:命令行式shell界面
普通的裸机程序运行起来就直接执行了,执行时的效果和代码有关
有些程序需要和人进行交互,于是乎程序中就实现了一个shell
shell
就是通过人机交互的一个界面
uboot
就是实现了这样一个shell
注意:
shell
并不是操作系统,和操作系统一点关系都没有Linux
中打开一个终端后就得到一个shell
,可以输入命令回车执行uboot
中的shell
工作方式和Linux
中的终端shell
非常像
(几乎是一样的,只是命令集不一样,譬如Linux
中可以ls
,而在uboot
中ls
是不被识别的)
Part3:命令和环境变量
-
uboot
启动后大部分时间和工作都是在shell
下完成的譬如
uboot
要部署系统要在shell
下输命令、要设置环境变量也得在命令行下,要启动内核也要在命令行下敲命令 -
命令就是
uboot
的shell
中可以识别的各种命令,uboot
中有几十个命令,其中有一些常用另一些不常用我们还可以自己给
uboot
添加命令 -
uboot
在设计时借助了操作系统的设计理念,uboot
的环境变量和操作系统的环境变量的工作原理、方式几乎完全相同命令行工作方式借鉴了
Linux
终端命令行
环境变量借鉴了操作系统的环境变量
uboot
的驱动管理几乎完全照抄了Linux
的驱动框架 -
环境变量可以被认为是系统的全局变量,环境变量名都是系统内置的
认识就认识,不认识就不认识
这部分是系统自带的默认的环境变量,譬如PATH
但是也有一部分环境变量是自己添加的,自己添加的系统就不认识,但是我们认识 -
系统或者我们自己的程序在运行时可以通过读取环境变量来指导程序的运行。
这样设计的好处就是灵活
譬如我们要让一个程序更改运行方法
就不用去重新修改程序代码再重新编译运行
而只要修改相应的环境变量就可以了 -
环境变量就是运行时的配置属性
思考:结合ARM裸机部分进行理解和印证
结合ARM裸机,对比分析思考,会得到更多