Chinaunix首页 | 论坛 | 博客
  • 博客访问: 384667
  • 博文数量: 73
  • 博客积分: 2620
  • 博客等级: 少校
  • 技术积分: 1212
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-09 10:47
文章分类
文章存档

2011年(18)

2010年(50)

2009年(5)

我的朋友

分类: 嵌入式

2010-11-27 17:56:24

u-boot环境变量相关的初始化过程如下:
1 在board.c文件中选择不同板级对应的env_init(),将环境变量首地址和大小等参数存储到gd结构中。
2 接着执行env_relocate(),将不同介质中存储的环境变量拷贝到内存中,将内存中的环境变量地址重新写到gd中,以后在u-boot中的所有环境变量操作均是针对内存中的环境变量拷贝进行的。
 
与u-boot的环境变量相关的文件主要有:
1 环境变量使用的数据结构env_t定义在include/enviroment.h,一般会将字符串地址放到env_ptr中;
2 根据存储环境变量介质的不同分为env_dataflash.c env_eeprom.c env_flash.c env_nand.c env_nvram.c env_nowhere.c,函数env_init()和saveenv()就定义在该文件。
3 对环境变量的各种命令操作定义在cmd_nvedit.c
 
include/configs/xxx.h中使用的环境变量的宏定义包括:
存储介质CFG_ENV_IN_XXX,环境变量首地址CFG_ENV_ADDR,大小CFG_ENV_SIZE
当然如果选择不使用保存在介质上的环境变量,而使用程序text段中的环境变量应该使用CFG_ENV_IN_EMBEDDED
 
系统启动后会将保存到指定介质中的环境变量字符串取出并做CRC32校验,将校验结果与介质中保存的CRC32值进行比较,但如果之前从来没有将环境变量保存到介质中,则校验结果肯定错误,所以这就是为什么有时候启动时总体是CRC32校验错误的原因。
 
对环境变量的命令操作如下:
打印prinenv nor_boot
设置setenv nor_boot 'xxxx;xxxx'
删除setenv nor_boot
保存saveenv
 
 
 
 
 
阅读(3111) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~