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) |