1、编译fw_printenv工具
在你使用的uboot代码中用以下编译指令:
make env
这样就可以编译tools/env下的代码,编译出的fw_printenv工具有读写uboot环境变量区的能力。这个工具是针对目标机的,也就是说如果你的uboot代码之前是针对ARM编译的话,fw_printenv也是交叉编译给ARM芯片的。
2、安装fw_printenv工具
到/tools/env目录中,将编译好的fw_printenv拷贝到目标机的文件系统中,并通过"ln -s fw_printenv fw_setenv",创建一个fw_setenv到fw_printenv的软链。
这个工具还需要一个配置文件,以获取uboot的ENV区域的位置信息。默认状态下,请将fw_env.config文件拷贝到目标机的文件系统的/etc目录下。然后结合uboot配置中定义的ENV区和Linux下mtd分区的情况修改配置文件。具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。
以s3c2416为例,s3c2416的配置文件在include/configs/smdk2416.h,在文件中找到了这样几个定义:
#define CFG_ENV_ADDR 0
#define CFG_ENV_SIZE 0x4000 /* Total Size of Environment Sector */
#define CFG_ENV_OFFSET 0x0003c00
跟据以上三个定义修改fw_env.config:
其实fw_printenv使用起来和uboot下的printenv和setenv指令是一模一样的。
打印uboot环境变量:
fw_printenv [[ -n name ] | [ name ... ]]
如果不指定name,fw_printenv会打印出ENV区中的所有环境变
设置uboot环境变量:
fw_setenv name [ value ... ]
如果不指定value,表示要删除这个name的环境变量。