首页 > 代码库 > U-Boot-2014.01 for Tiny210移植手册(零) ---- 移植前的准备

U-Boot-2014.01 for Tiny210移植手册(零) ---- 移植前的准备

启动过程分析

  其实S5PV210的启动过程网上一搜一大把,这里就不详细讲了。下面我们结合U-Boot的启动过程和S5PV210启动过程结合起来对比。

  根据S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf,我们可以得知,S5PV210的启动过程分为3个阶段:

  • BL0:固化在内部ROM中的执行步骤,每次打开电源就执行。它将BL1阶段的代码复制到内部RAM
  • BL1:在内部RAM里面执行。它将负责加载BL2的代码到内部RAM。BL1的大小规定不超过16K,并且头部要加上16字节的校验码
  • BL2:在内部RAM里面执行。它的工作是初始化DRAM控制器,并把OS的数据加载到SDRAM。因为内部RAM的大小是96K,BL1占了16K,所以BL2最多为80K

 

关于BL0

  BL0阶段,三星固化在内部ROM里面的代码究竟做了什么工作?查阅S5PV210_iROM_ApplicationNote_Preliminary_20091126.pdf我们可以得知,BL0的固化代码做了以下的工作:

  1. 关闭看门狗

  2. 初始化iCache (即 instruction cache, 指令用的缓存)

  3. 初始化栈

  4. 初始化堆

  5. 初始化块设备拷贝函数库 (它是个函数库,我们待会移植时会用到从SD卡复制到SDRAM的函数)

  6. 初始化PLL和系统时钟 (默认的系统时钟频率才400MHz,我们待会将它提高到1GHz)

  7. 把BL1的代码复制到内部RAM

  8. 检查BL1的校验码 (这就是BL1代码前16字节的作用)
    如果校验失败,内部ROM将会以第二启动顺序 (SD/MMC 通道2)

  9. 查看是否安全启动模式 (我们这里不关心)

  10. 跳转到BL1

 

关于BL1、BL2和U-Boot启动顺序

  我们先看看U-Boot的启动顺序。在U-Boot中,我们先启动SPL (位于U-Boot源码的SPL文件夹中),SPL负责把U-Boot代码从启动设备 (SD卡/Nand Flash)拷贝到SDRAM中,再跳转到SDRAM执行剩下的U-Boot代码。

  这里对比一下S5PV210的启动顺序,我们可以知道,SPL就是所谓的BL1阶段,然后我们没有BL2阶段,而是直接跳到SDRAM执行剩下的U-Boot代码。为什么?因为前面说了,内部RAM只有96K大小,而一个U-Boot也有100+K,SPL有16K,内部RAM肯定放不下。所以我们只能把SPL放在内部RAM,让SPL把U-Boot代码从启动设备拷贝到SDRAM里面,再跳转执行。

  总结一下:

  BL0:固化在内部ROM

  BL1:U-Boot里面的SPL

  BL2:没有BL2阶段

 

精简U-Boot目录结构

  下面我们来做一件很爽的事情。下载完U-Boot源码之后你会发现,U-Boot占用很大,支持很多开发板和CPU。但是其实对于嵌入式来说,我们每次移植只关心我们的目标开发板和CPU,其它开发板和CPU对于我们来说都是多余的。因此,我们可以进行U-Boot目录的精简。而且,精简U-Boot目录结构有个好处,就是移植时出现的错误,你使用grep "错误信息" . -nR查询错误相关文件时,能少显示很多无关的文件。还有,对于我这种有“洁癖”的人来说,必须精简..... 唉~

  这里我们以Tiny210开发板为例,它使用的是armv7的CPU架构,here we go:

  • arch目录

    1. 除arm目录,其它架构的目录全部删掉。删去后的目录结构:(请自动忽略掉.gitignore文件)
    2. 进入arm目录,除CPU、include、lib目录和config.mk文件,其它目录全部删掉
    3. 进入CPU目录,除了armv7目录、.depend、Makefile、u-boot.lds、u-boot-spl.lds,其它全部删掉 (built-in.o是编译后才生成的)
    4. 进入armv7目录,保留如下图所示的目录和文件,其它全部删掉 (.o文件是编译后生成的,请自动忽略 - -b)
  • board目录

    1. 进入board目录,除了samsung目录,其它全删去
    2. 进入samsung目录,除了smdkc100目录,其它全部删去
  • include/configs目录

    1. 进入include/configs目录,除了smdkc210.h,其它全部删去

 

Source Code: https://github.com/a226035102/U-Boot-2014.01_for_tiny210