U-boot的整体结构和linux基本类似,编译方式一般也是非常类似的,一般的编译命令:
make CROSS_COMPILE=arm-linux-gnueabihf- XXX(目标名)
清除命令:
make CROSS_COMPILE=arm-linux-gnueabihf- distclean
其实,他的目录结构也和linux'的内核比较类似,这里就对他的内核结构做个大致的介绍:
* board 目标板相关文件,主要包含各种驱动的初始化和配置,比如,SPI,USB,单板信息等
* common 独立于处理器体系结构的通用代码,主要是很多通用的接口封装,如USB,GPIO,文件系统等;
* examples可在U-Boot下运行的示例程序;如hello_world.c, timer.c,test_burst.c等
* driver 通用设备驱动,常用的通信接口驱动都有,如ddr,i2c,pci,net等
* include U-Boot头文件;尤其configs子目录下与目标板相关的配置头文件是移植过程中经常要修改的文件;
* SPL 与网络功能相关的文件目录,如bootp,nfs,tftp;
SPL是Secondary Program Loader的简称,第二阶段程序加载器,这里所谓的第二阶段是相对于SOC中的
BROM来说的,之前的文章已经有所介绍,SOC启动最先执行的是BROM中的固化程序。
BROM会通过检测启动方式来加载第二阶段bootloader。uboot已经是一个bootloader了,那么为什么还多一个uboot spl呢?
这个主要原因是对于一些SOC来说,它的内部SRAM可能会比较小,小到无法装载下一个完整的uboot镜像,那么就需要spl,
它主要负责初始化外部RAM和环境,并加载真正的uboot镜像到外部RAM中来执行。所以由此来看,SPL应该是一个非常小
的loader程序,可以运行于SOC的内部SRAM中,它的主要功能就是加载真正的uboot并运行之。
总体来说,u-boot的结构和linux内核还是很像的,以后在实际使用的过程中再继续分析一下代码和流程。