一、关于Uboot的说明
这个Uboot使用的是2016.11的版本
最大的更新为引入了make,menuconfig这一套
BL0是芯片内部的BootROM (irom) 代码,BL1就是Uboot源码,BL2就是Kernel代码,根文件系统系统这些属于BL3。
BL0会根据我们设置的启动方式,到相应的外部介质里面去读取BL1,然后来启动这个BL1。
能够下载Uboot是因为有BL0固化在板子里面了。
能够下载Kernel,Rootfs是因为有Uboot的FastBoot功能已经支持Hi Tool了,Uboot必须提供FastBoot功能。
Uboot能够启动内核,并且给内核传参
Uboot整个启动分为两大阶段:
第一阶段:Start.s 里面,这个主要是跟芯片有关的,跟系统有关的,这个阶段的差异是最大的。
第二阶段:跳到C语言里面,StartARMBoot,这个函数主要是在board.c里面,板级初始化,是开发板这个级别的初始化,往后都是纯软件初始化。
配置文件:配置文件都是相同的,指的是配置文件在哪些地方
代码结构:Uboot中文件夹的结构,也都是类似的
启动流程:启动流程,都是分为两大块:Start.s,Board.c
纯软件部分:跟硬件无关的软件功能
现在来讲:
如果在产品厂商:Uboot的工作量一般是不大的,因为芯片厂商给的Uboot基本就能用了;需要自己修改的部分并不是很多。
对芯片厂商底层开发者来说:需要一个开机动画的logo,需要一个分辨率很高的logo,那么就需要在Uboot里面作修改了。
本课程详解uboot第一阶段,这一阶段,有比较多的内容是依赖海思这个平台的。
二、Uboot2016.11的一般分析
2.1 删除Uboot中一些非必要的源码,然后就只留下ARM的源码
2.1.1 uboot/arch/路径
- 首先是arch路径下,只留下ARM的源码
- 接着是arch/arm/路径下,只留下mach-hi35xx的源码
- 然后是arch/cpu/路径下,只留下armv7,armv7m,一般的话,只留下armv7
- 然后是arch/cpu/armv7路径下,只是留下Hi3516DV300这个
2.1.2 uboot/board/路径
- 首先是board路径下,只留hisilicon文件夹,其余全部删掉
- 接着是board/hisilicon路径下,只留hi3516dv300文件夹,其余全部删掉
2.1.3 uboot/configs/路径
只留下Hi3516DV300相关的配置文件,其余都删掉
其实也只是能用到emmc_defconfig这个文件,其余的文件也用不到
实际上,uBoot也没有使用到设备树功能
2.1.4 uboot/include/路径
- 首先是uboot/include/configs/路径,只保留与海思有关的文件
- 然后是uboot/include//路径下还有一个也要删除,暂时的话,还没有删除
2.2 建立Uboot源码浏览工程
分析源码的这一份,要纯源码的,要没有编译过的
并要注意解析
用VSCode也是可以浏览的
2.3 uboot的配置体系,.config和xxxx.h共同作用
以前只有采用.h来配置,现在可以使用.cofig+.h来共同进行配置
将来还需要将顶层目录的的configs下的defaultconfig复制为.config文件
后面在分析源码的时候,有很多东西都是来自于.config文件中,和kernel中的玩法是一样的
2.4 顶层目录的Makefile
主体依然在此
2.5 链接脚本lds文件
寻找整个uboot入口的关键,链接脚本里面规定了entry是谁等等
第一句代码从哪里开始,很大程度上,就是取决于这里
2.6 新增的2个关键点
和以前的Uboot的差异:
两段式的Uboot:直接编译的Uboot不能用,还得经过一次Uboot-z才行,还要进行二次制作,也就是用那个excel表格生成一个.reg文件,现在很多平台,比如全志,也都会采用这种两段式的Uboot的方式。
压缩版的uboot
前几节中有一步就是编译一个hi_gzip的工具进行压缩,就是把原版的Uboot进行了压缩,然后再去做这种两段式的Uboot
这种技术以前也没有涉及,这个就是Linux Kernel中的ZImage技术
Linux Kernel是一个宝藏,基本很多技术都在抄袭Linux Kernel
三、本课程会用到的技术和资料
关键是基本功,也就是核心课程1期中uboot移植课程里手把手培养的,这个在核心课程1期中占了很大的比例,因为Uboot能很大程度上提升基本功
主体信息在源码中,比如makefile、config文件等等
要配合芯片数据手册,海思官方doc中提供了一个简化版本的,详细版的没有,因为国内的芯片厂商习惯上把核心的源码直接给你,告诉你直接这样用就可以了,需要查阅的细节也不是很多,给个冗余的数据手册并不方便查阅
本来需要irom application note的,这个会告诉你芯片里面的BL0是做了什么事情,三星是有这个文档,海思是没有, 因为他不希望你关注这些细节。他希望你拿来就用