目前移植的uboot支持SDRAM、Nor Flash、Nand Flash、DM9000网卡,但是还有一行警告没有处理: 通过搜索这行日志内容找到所在位置: 该函数中主要使用的 default_environment 数组,接着查看该数组内容,同样定义在该文件中,该数组的功能是根据我们定义的宏定义来设置默认环境变量参数。
在单板配置文件include/configs/smdk2440.h中配置这些相关宏定义:
编译,下载到开发板,查看串口输出: 修改默认配置成功,但是启动时还是会输出这行提示信息:
这是因为只修改了代码中的宏定义,而没有将这些环境变量参数save到Flash中,所以uboot启动时,去读取flash中的参数发生错误,然后使用默认环境变量,也就是在第2节中配置的那些宏定义。
在uboot的命令列表中可以看到saveenv命令表示将环境变量值存储到当前存储器中: 全局查找saveenv命令的实现,找到了两个定义:
在common/env_nand.c文件中:saveenv会将环境变量存入nand flash中; 在common/env_flash.c文件中:saveenv会将环境变量存入nor flash中; 两个文件中的定义冲突,肯定不会同时加入工程中编译,所以查看这两个文件同目录下的makefile: 可以看到,结果为:
配置宏定义CONFIG_ENV_IS_IN_FLASH:加入common/env_flash.c文件; 配置宏定义CONFIG_ENV_IS_IN_NAND:加入common/env_nand.c文件; 接下来测试将环境变量存入nand flash。
首先在单板配置文件中配置宏定义,注意和另一个宏定义的冲突: 进入common/env_nand.c文件中找到 saveenv 定义: 在定义中可以看到主要有三个宏定义,表示存入内存的地址,大小,擦除范围,在单板文件中添加配置(注意去掉原有宏定义的冲突):
接着编译,烧写到开发板中,在串口终端中进行测试: saveenv成功,重启开发板,可以看到uboot从nand flash中默认读取出了环境变量,警告消失: