树莓派3/A20 Bootloader加载过程分析

2019-07-13 08:26发布

      作为一名树莓派3的玩家,可能会将会感兴趣于这个板子的启动过程,就嵌入式linux而言,整个加电——启动bootloader——启动内核——加载rootfs流程对于新手会感到非常的模糊,而不知如何下手。本篇内容尽可能详细的描述了利用superboard从加电到启动linux内核的整个操作过程,为进一步学习如何构建一个可运行的linux系统打下了基础。后面,将会在此基础上继续介绍如何进一步挂载跟文件系统,启动到shell甚至GUI图形界面,从而构建一个完整、可用的linux系统。
    由于全志A10和A20在加载Bootloader过程方面基本一致,下面仅以A20叙述,但同时也适用于A10,另现在市面上一般所说的SD卡即为Micro SD Card,也就是TF卡,为区别于一般传统的SD卡,本文一般使用TF卡描述,但同于平时所说的SD卡。
     A20的启动过程大概可分为5步:
     Boot ROM,SPL,Uboot,Kernel,RootFileSystem。

     本文关注的是镜像的加载和启动过程,分析Boot ROM→SPL→Uboot→Kernel的启动流程
     系统上电后,ARM处理器在复位时从地址0x000000开始执行指令,把板上ROM或Flash映射到这一地址。A20将启动设备选择程序固化在CPU内部的一个32KB ROM中,默认的启动时序为SD Card0,NAND FLASH,SD Card2,SPI NOR FLASH。另外通过外部的一个启动选择引脚可以使其跳转到USB启动模式。通常情况下,启动选择引脚状态连接50K内部上拉电阻。在上电后,执行存储在Boot ROM中的启动代码,将自动检测启动选择引脚状态。只有当该引脚状态为低电平时才选择USB启动模式。在选择启动设备后将加载并执行bootloader程序,CPU通过拷贝或映射bootloader程序到内存,然后执行bootloader的第一条指令。通过阅读官方的uboot烧写方法,发现A20通过uboot引导系统之前先载入了uboot SPL。
       什么是SPL?通过查阅uboot的官网资料得知,SPL是一个迷你版的uboot,全拼为Second Program Loader。适用于SOC的内部SRAM<64K的情况,用它来加载完整的uboot程序到SDRAM,并通过完整uboot加载内核来启动系统。其中SRAM一般指CPU内部的L1/L2或外部的L2高速缓存,这里即为Boot ROM,而SDRAM一般指内存。

    SPL程序流程如下:
1. 初始化ARM处理器
2. 初始化串口控制台
3. 配置时钟和最基础的分频
4. 初始化SDRAM
5. 配置引脚多路复用功能
6. 启动设备初始化(即上面选择的启动设备)
7. 加载完整的uboot程序并转交控制权 如下图       搞清楚了上面的概念,可以知道superboard出厂已经烧写了NandFlash中的程序,即在启动时使用的是
NandFlash。现在根据全志A20上述步骤,我们尝试用SD Card0(即树莓派3上卡槽中的TF卡)来启动
系统。
     感谢:itviewer      树莓派3 请看这里:http://blog.csdn.net/ok138ok/article/details/20941801