一级启动Bootstrap关键代码分析及U-boot代码对dataflash分区实现

更多相关u-boot博客

/*U-boot启动信息*/

DataFlash:AT45DB321
Nb pages:  8192
Page Size:   528
Size= 4325376 bytes
Logical address: 0xC0000000
Area 0: C0000000 to C0003FFF (RO)
Area 1: C0004000 to C0007FFF
Area 2: C0008000 to C0037FFF (RO)
Area 3: C0038000 to C041FFFF
       直截了当的说吧,Area 0+ Area 1就是Bootstrap的分区,其中Area 0规定了Bootstrap的大小,Area 1规定了参数存放的地址及其大小范围, Area 2是U-boot所在的空间范围,最后一个用作他用,我的板子是从Dataflash启动,我自己把第四个分区作为内核分区使用。这部分的定义和U-boot中相应部分的定义是相关连的。具体分析如下:
  1.解压完下载的AT91Bootstap后打开头文件:/board/at91sam9263ek/dataflashat91sam9263ek.h,默认代码:
/* ******************************************************************* */
/* BootStrap Settings                                                 */
/*                                                                    */
/* ******************************************************************* */
#define AT91C_SPI_PCS_DATAFLASH       AT91C_SPI_PCS0_DATAFLASH        /* Boot on SPI NCS0 */
#define IMG_ADDRESS                     0x8400               /* Image Address in DataFlash */
#define      IMG_SIZE                           0x33900                      /* Image Size in DataFlash*/
#define MACH_TYPE                   0x4B2        /* AT91SAM9263-EK */
#define JUMP_ADDR                           0x23F00000                /* Final Jump Address*/
/* ******************************************************************* */
      对默认代码进行一下解释:
           #define IMG_ADDRESS     0x8400
     这句话是指的U-boot在Dataflash中的地址,因为Bootstrap-1.16和U-boot-2010.06对Dataflash的分区定义匹配,可以看U-boot中相关代码。
          #define  IMG_SIZE     0x33900
     指定了U-boot分区的最大容量。结合文章头部的启动信息可以看到:U-boot最大不能超过192K,确实U-boot-1.1.5编译完以后175k左右完全可以,但是经过最2010.06版本进行编译发现U-boot居然超过200k,当然我们的分区也是不能用的。想要使用新版本的Bootstrap和U-boot需要对Dataflash重新进行分区,操作一会讲,现在只解释代码的含义。
   #define JUMP_ADDR     0x23F00000
     最后跳入的内存地址,需要和U-boot中TEXT_BASE =保持一致。TEXT_BASE段位于目录:
     u-boot-2010.06/board/atmel/at91sam9263ek/config.mk中 在编译Bootsrap的时候需要修改Makefile中的交叉编译器的路径。
        2.在U-boot中,对Dataflash进行分区的代码在board/atmel/at91sam9263ek/partition.c中规定,默认代码:
/*define the area offsets*/
dataflash_protect_t area_list[NB_DATAFLASH_AREA] = {
        {0x00000000, 0x000041FF, FLAG_PROTECT_SET,  0, "Bootstrap"},
        {0x00004200, 0x000083FF, FLAG_PROTECT_CLEAR, 0, "Environment"},
        {0x00008400, 0x00041FFF, FLAG_PROTECT_SET,  0, "U-Boot"},
        {0x00042000, 0x00251FFF, FLAG_PROTECT_CLEAR, 0,     "Kernel"},
        {0x00252000, 0xFFFFFFFF, FLAG_PROTECT_CLEAR, 0,   "FS"},
};
         修改以后就可以实现dataflash的分区设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值