您的位置:首页 > 其它

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

2010-09-18 16:58 239 查看
前面我们说过是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中添加如下代码
       #define   CONFIG_ENV_IS_IN_NAND         1
#define
  CONFIG_ENV_IS_IN_FLASH                1
添加上面两句话是为了确保common/env_flash.c和common/env_nand.c中的内容被编译进uboot,并且添加这两种情况环境变量保存位置信息:
#ifdef    CONFIG_ENV_IS_IN_FLASH  1
#define   CONFIG_ENV_ADDR  (CONFIG_SYS_FLASH_BASE + 0x30000)
#endif
#ifdef    CONFIG_ENV_IS_IN_NAND    1
#define   CONFIG_ENV_SIZE           0x10000
#define    CONFIG_ENV_OFFSET     0x30000
#endif
 
2.       
标志位的设定
在这里我们我们要设置一个标志位用来标识是nor启动还是nand启动。我们在common/nand.c中添加这个标志位的定义
volatile int 
pbootflag=1; //add by lht  
1->nor  0->nand
然后我们在cpu/arm920t/start.S导入这个变量并判断是nor启动还是nand启动设置这个标志位的值
# define
BWSCON        0x48000000 
dr
r0,=BWSCON
ldr
r0,[r0]
ands
r0,r0,#6
beq
nand_boot
/***********/
Nor 自搬移代码
/***********/
nand_boot:
       ldr 
r0, =pbootflag
       mov r1, #0x0
       str 
r1, [r0]           /*设置pbootflag的值为0表示为nand启动*/
/***********/
Nand
自搬移代码
/***********/
3.       
环境变量的保存
4000

通过第一步的操作后,我们的系统中就会有两个env_init函数、saveenv函数和env_relocate_spec函数在common/env_flash.c和common/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();
 }
       
修改int  saveenv(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上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  flash c