菜鸟的cubieboard之旅(一)--启动流程

  到手一块cubieboard2,一直没怎么玩过。之前做过一些linux的驱动,但是感觉整体把握不是很好,想借cubieboard这个学习机会,让自己知识面全面点。

  cubieboard的资料比较杂,而且资料没有树莓派这么多,所以找资料这个过程还是比较痛苦的。废话不多说,开始吧

  先从总体上了解下cb2的启动过程,对整体有个了解,参考http://mer.jolladev.net/wiki.php?id=%E5%90%AF%E5%8A%A8cubieboard2%E5%88%B0linux_kernel 

  A20的启动过程大概可分为5步:Boot ROM,SPL,Uboot,Kernel,RootFileSystem。系统上电后,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程序并转交控制权

启动设备选择程序的流程图:

搞清楚了上面的概念,可以知道Cubieboard出厂已经烧写了NandFlash中的程序,即在启动时使用的是NandFlash。现在根据全志A20上述步骤,我们尝试用SD Card0(即Cubieboard上卡槽中的TF卡)来启动系统。

 

 

你可能感兴趣的:(菜鸟的cubieboard之旅(一)--启动流程)