加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 21:17:00 所属栏目:安全 来源:网络整理
导读:更多相关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) Are

更多相关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,"Environment"},? ? ? ? {0x00008400,0x00041FFF,"U-Boot"},? ? ? ? {0x00042000,0x00251FFF,? ? "Kernel"},? ? ? ? {0x00252000,0xFFFFFFFF,? "FS"},}; ? ? ? ? ?修改以后就可以实现dataflash的分区设置。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读