`
king_tt
  • 浏览: 2110419 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

关于u-boot同时支持nand启动和Nor启动环境变量的保存位置

阅读更多

uboot,我对你是即爱又恨啊,你当时整了我几近三个多月。还没整理到uboot,看到的好文章先mark一下,以后整理的时候用到。

转自:http://www.eefocus.com/ayayayaya/blog/10-10/196848_87e6f.html

 

­——华清远见曹忠明

前面我们说过是u-boot同时支持nand flash启动和nor flash启动,可是这个时候就有个环境变量的保存位置的问题了。假如我们设置为环境变量保存在nand上,nor启动时虽然保存环境变量的空间之前有一段空间浪费了,但不会有什么问题,但是假如我们设置为环境变量保存在nor上,nand启动就根本不能访问这段空间更谈何保存环境变量了,理想的情况是更加不同的flash启动把环境变量保存在相应的flash上。那么这是如何实现的呢?

在说如何实现之前我们先把相关的文件列出来(S3C2410为例)

cpu/arm920t/start.S /*用来判断是那种方式启动并实现自搬移*/

include/configs/smdk2410.h /*smdk2410配置文件*/

common/env_flash.c/*nor flash环境变量相关文件*/

common/env_nand.c/*nand flash环境变量相关文件*/

 

1.首先我们在include/configs/smdk2410.h中添加如下代码

#defineCONFIG_ENV_IS_IN_NAND1

#defineCONFIG_ENV_IS_IN_FLASH1

添加上面两句话是为了确保common/env_flash.ccommon/env_nand.c中的内容被编译进uboot,并且添加这两种情况环境变量保存位置信息:

#ifdefCONFIG_ENV_IS_IN_FLASH1

#defineCONFIG_ENV_ADDR(CONFIG_SYS_FLASH_BASE + 0x30000)

#endif

#ifdefCONFIG_ENV_IS_IN_NAND1

#defineCONFIG_ENV_SIZE0x10000

#defineCONFIG_ENV_OFFSET0x30000

#endif

 

2.标志位的设定

在这里我们我们要设置一个标志位用来标识是nor启动还是nand启动。我们在common/nand.c中添加这个标志位的定义

volatile intpbootflag=1; //add by lht1->nor0->nand

然后我们在cpu/arm920t/start.S导入这个变量并判断是nor启动还是nand启动设置这个标志位的值

# define BWSCON0x48000000

dr r0,=BWSCON

ldr r0,[r0]

ands r0,r0,#6

beq nand_boot

/***********/

Nor自搬移代码

/***********/

nand_boot:

ldrr0, =pbootflag

mov r1, #0x0

strr1, [r0]/*设置pbootflag的值为0表示为nand启动*/

/***********/

Nand自搬移代码

/***********/

3.环境变量的保存

通过第一步的操作后,我们的系统中就会有两个env_init函数、saveenv函数和env_relocate_spec函数在common/env_flash.ccommon/env_nand.c中,在我们执行saveenv或者在uboot启动是环境变量重定位的时候就有问题了,为了解决这个问题我们做如下操作。

首先我们把common/env_flash.c中的env_init函数、saveenv函数和env_relocate_spec函数分别改名为nor_env_init函数、nor_saveenv函数和nor_env_relocate_spec函数。

然后我们需要修改common/env_nand.c中的saveenv函数和env_relocate_spec函数为:

修改int env_init(void)函数在函数开始添加如下内容:

if(pbootflag==1)

{

env_name_spec = "NOR";

env_ptr=(env_t *)CONFIG_ENV_ADDR;

return nor_env_init();

}

 

修改intsaveenv(void)函数,在函数开始添加如下内容

if(pbootflag==1)

{

env_name_spec = "NOR";

return nor_saveenv();

}

修改void env_relocate_spec (void)函数,在函数开始添加如下内容

if(pbootflag==1)

{

return nor_env_relocate_spec();

}

这个时候我们的uboot就能够同时支持nor flash启动和nand flash启动并能够把环境变量保存在相应的flash上。

 

 

分享到:
评论

相关推荐

    黄刚博客--友善之臂mini2440-u-boot从nand flash启动6博客全集

    黄刚-u-boot-2009.08-nand flash-mini2440本次移植的功能特点包括: 支持Nand Flash读写 支持从Nor/Nand Flash启动 支持CS8900或者DM9000网卡 支持Yaffs文件系统 支持USB下载等 。。。。

    s3c2410开发板u-boot移植详细配置nandflash启动

    s3c2410开发板u-boot移植详细配置nandflash启动

    u-boot1.1.6在mini2440上nor和nandflash启动

    u-boot1.1.6在mini2440上nor和nandflash启动,分norflash和nandflash启动做了详尽的移植分析

    论文研究-U-BOOT从NAND Flash启动的实现 .pdf

    U-BOOT从NAND Flash启动的实现,王磊,何小刚,U-BOOT是一款功能强大的引导装载程序,但不支持从NAND flash启动。针对这一点本文提出了一种使其支持从NAND flash启动的方法。本文分析了U

    最新u-boot:u-boot-2012.07 mini2440移植(nandflash启动)

    本人原创, 最新u-boot-2012.07 mini2440基于nandflash启动的移植, 新鲜出炉, 与旧版本不同, 本资源是基于nand_boot函数移植的, 应该说这种移植方法才是u-boot官方推荐的nandflash启动方法。 不多吹了, 见运行...

    u-boot-nand启动

    详细的nand支持 保证节省了自己的开发时间

    RISC-V U-Boot启动流程图.pdf

    RISC-V U-Boot启动流程图.pdf

    u-boot2017.01启动过程分析.pdf

    u-boot2017.01启动过程分析,以ppt的方式对uboot2017.11的启动过程进行分析,主要分析了启动过程函数的调用过程

    u-boot开源代码

    ◆ board:和一些已有开发板有关的文件,比如Makefile和u-boot.lds等都和具体开发板的硬件和地址分配有关。 ◆ common:与体系结构无关的文件,实现各种命令的C文件。 ◆ cpu:CPU相关文件,其中的子目录都是以U-...

    U-Boot启动参数解析

    本文为U-Boot启动参数的解析,分别讲述了: (1) SD卡启动脚本 (2) SD卡 (3) NAND FLASH (4) SPI FLASH

    u-boot源码分析

    本文从以下几个方面粗浅地分析u-boot并移植到FS2410板上: ...实现了NOR Flash和NAND Flash启动,网络功能。  这些认识源于自己移植u-boot过程中查找的资料和对源码的简单阅读。下面主要以smdk2410为分析对象。

    u-boot-sunxi-with-spl-vga.bin

    u-boot-sunxi-with-spl-vga

    从Nand Flash启动U-BOOT的基本原理

    S3C2410被配置成从NAND闪存启动,上电后,S3C...根据U-BOOT的执行流程图,可知要实现从NAND闪存中启动U-BOOT,首先需要初始化NAND闪存,并从NAND闪存中把U-BOOT搬移到RAM中,最后需要让U-BOOT支持NAND闪存的命令操作。

    U-BOOT启动流程详解

    开发板上电后,执行U-Boot的第一条指令,然后顺序执行U-Boot启动函数。函数调用顺序如图6.3所示。 看一下board/smsk2410/u-boot.lds这个链接脚本,可以知道目标程序的各部分链接顺序。第一个要链接的是cpu/arm920t/...

    u-boot-2009.11

    2、自动识别S3C2440的启动方式,并能够将环境变量的保存到对应的位置 3、支持网卡芯片DM9000 4、支持不同NAND Flash的读写,并自动识别所使用的nand flash是512B/page还是2KB/page,实现在64MB\128MB\256MB\1GB NAND...

    使用NandFlash上的u-boot烧写NorFlash.zip

    u-boot-1.1.6.tar.bz2:未经修改的u-boot-1.1.6源码 u-boot-1.1.6_jz2440.patch: 支持JZ2440的u-boot-1.1.6补丁

    u-boot-u-boot-2013.01.y.zip

    U-Boot不仅仅支持嵌入式Linux系统的引导,它还支持NetBS D, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android嵌入式操作系统。其目前要支持的目标操作系统是OpenBSD, NetBSD, FreeBSD,4.4BSD, Linux, SVR4, Esix, ...

    u-boot200901 nand启动 2410

    u-boot200901 nand启动 2410 移植有一段时间了,不拿上来共享有点不好意思了

    移植u-boot到2410实现nor和nand双启动

    详细表述了移植u-boot1.1.6到2410,实现nor和nand双启动

    tp-link741n_v1解锁U-boot的OpenWRT固件、不死U-boot及刷入工具

    包括: 1、解锁U-boot的固件openwr-ar71xx-generic-tl-wr741nd-v1-squashfs-factory.bin,功能简单,只为方便刷入不死U-boot 2、适用wr741nd-v1的不死U-boot及其升级版breed 3、刷入工具

Global site tag (gtag.js) - Google Analytics