zoukankan      html  css  js  c++  java
  • S3C6410的Bootloader的两个阶段BL1和BL2编译相关学习

    ********************************LoongEmbedded********************************

    作者:LoongEmbedded(kandi)

    时间:2011.7.20

    类别:WINCE bootloader开发

    ********************************LoongEmbedded********************************

    备注:此开发支持IROM启动方式,包括支持SD和NAND Flash这两种启动介质的启动,在学习中主要是针对NAND Flash的启动方式来展开学习的。

    本文基于Real6410开发板来学习的,此开发板把我们通常的stepldr分成nbl1和nbl2这两部分,这里的nbl我的理解是nboot的boot bootloader,而1是stepldr的第一阶段,2表示第二阶段,下面就来学习如何编译生成nbl1和nbl2的内容,以及它们的bib和makefile.inc的学习。

    1.      nbl1

    1.1   nbl1的bib文件

    图1

    下面就来学习这两部分的内容:

    1)      NBL1的RAMIMAGE这一项的内容

    首先因为我们是采用IROM的启动方式,在SMDK6410的SMDK6410.bat中对此环境变量定义如下:

    set BSP_IROMBOOT=1

    从图1可知NBL1      0C000000  00002000  RAMIMAGE

    我们知道RAMIMAGE指定这块内存用于加载NBL1的镜像,在系统上电后,NBL1的镜像会被IROM的boot code拷贝到这块区域上面运行。那为什这块区域的起始地址是0x0C000000?大小是0x00002000(8KB)呢?因为我们采用的是IROM启动方式,启动介质是NAND Flash,见下图:

    图2

    图2是在启动的时候设备操作模式的选择

    图3

    图3是设备的内存映射图,开发板是用Xm0CSn2作为NAND Flash的片选引号的,这种情况下,Stepping Stone映射到0x020000000~0x27FFFFFF这块区域,图3中的内部存储区的internal RAM部分,此区域的范围是0x0C000000~0x0BFFFFFF(64MB),但实际上可用的internal RAM部分只有8KB,这8KB的RAM也称为Stepping  Stone。

    由此可知0x0C000000是NBL1镜像被IROM的boot code加载到Stepping  Stone中的地址,也就是Stepping  Stone的起始地址。8KB的大小限制是S3C6410的Stepping  Stone只有8KB。

    2)      生成NBL1.nbx的配置

    nb0文件就是可执行映像的原始Flash映像,它不包括头,一般情况下将镜像下载到设备的RAM中运行都采用nb0格式,nb0文件的尺寸比bin大,但是可以直接运行,要生产nb0文件,就需要在NBL1.bib中加入下面的内容

    ROMSTART = 0C000000

    ROMWIDTH = 32

    ROMSIZE = 00001000

    ROMSTART:表示NBL1的nbx文件在内存(这里是Stepping  Stone)中的起始地址。

    ROMWIDTH:指数据总线的宽度。

    ROMSIZE:NBL1的nbx文件的大小,这里是0x00001000(4KB),在上面不是指定了NBL1.bin文件大小最大值可以是0x000020000(8KB)吗?这里为什么指定的是4KB呢?我们结合IROM启动方式的流程图来理解:

    图4

    根据图4可知,BL1(这里就是NBL1)这个bootloader的大小不能大于8KB,这是强制要求的,可见下图

    图5

    根据上面的描述我们可以理解了为什么ROMSIZE要求大小是4KB了。可因为实际生成的nbl1.bin(6KB)的大小大于4KB,这样就会生成nbl1.nb0、nbl1.nb1、nbl1.nb2和nbl1.nb3,不知道为什么会生成4个?见下图:

    图6

    我试着用比较工具比较了这4个nbx文件,虽然是乱码,但比较可知nbl1.nb0和nbl1.nb1内容一样,nbl1.nb2、nbl1.nb3内容依次减少,而且不一样。

    \WINCE600\PUBLIC\COMMON\OAK\MISC

    1.2   NBL1的makefile.inc文件

    内容如下:

    图7

    1)      Romimage工具打包生成nbl1.bin

    Romimage.exe是WINCE用于创建.bin(binary image)文件,此工具只接受一个bib文件作为输入参数,Romimage会根据此bib中的内容来为要生成的bin文件来分配物理内存地址。

    2)      Copy命令的应用

    /y:不使用确认是否要改写现有目标文件的提示。

    /b:表示一个二进制文件。

    上面的意思是把$(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)目录下的nbl1.nb1文件复制到此目录下,并且命名为nbl1.nb0,这也就是为什么用比较工具比较nbl1.nb1和nbl1.nb0内容是一样的原因。但不是很清楚为什么要这样做?

    3)      Copy指定的文件到指定的目录

    复制$(_PLATFORMROOT)\$(_TGTPLAT)\target\$(_TGTCPU)\$(WINCEDEBUG)下的nbl.*文件到$(_FLATRELEASEDIR)目录下,这时候要复制的文件见下图:

    图8

    这样我们就可以在release目录下看到这些文件了。

    1.3    

    2.      nbl2

    结合图4,我们知道BL1(nbl1)会装载BL2(nbl2)到SDRAM中执行,而本设计中SDRAM空间对应于图3的范围为0x50000000~0x5FFFFFFF的地址空间,这也就是nbl2镜像文件在SDRAM的转载地址,这样我们就可以较好理解下面的内容了。

    2.1   nbl2.bib文件

    图9

    2.2   nbl2的makefile.inc文件

    2.3    

    3.       

  • 相关阅读:
    一道面试题引发的对JavaScript类型转换的思考
    微信后台开发第一步:nodeJS+express接入微信后台详细教程
    class命名
    了解真实的『REM』手机屏幕适配
    js刷新框架子页面的七种方法代码
    移动前端开发之viewport的深入理解
    移动web点5像素的秘密
    refactor window_x64微信小程序环境搭建
    JSON API免费接口
    webpack
  • 原文地址:https://www.cnblogs.com/LoongEmbedded/p/5298774.html
Copyright © 2011-2022 走看看