HI3516DV300_14_Uboot的一般分析


一、关于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是做了什么事情,三星是有这个文档,海思是没有, 因为他不希望你关注这些细节。他希望你拿来就用


Author: Ruimin Huang
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source Ruimin Huang !
  TOC