使用fw_printenv修改uboot环境变量
最近遇到一个问题,有客户想要使用fw_printenv命令,在文件系统下查看和修改uboot环境变量。
网上搜索了一下相关的内容,发现fw_printenv真是一个好东西。
首先是fw_printenv工具的编译:
fw_printenv工具的源码在uboot源码目录下的tools/env/目录下,可以使用以下命令直接编译得到
make env ARCH=xxx CROSS_COMPILE=yyy
#其中xxx和yyy根据自己的交叉编译环境来配置
编译完成之后,就在tools/env下生成fw_printenv的可执行文件,将其拷贝到文件系统中就可以。
其次是fw_env.config文件的配置:
fw_env.config文件在文件系统的/etc目录下,记载着mtd分区、uboot环境变量的位置、大小等内容。
在uboot源码的tools/env/fw_env.config中也有一个简单的示例,具体的修改方法见fw_env.config文件中的说明及/tools/env/README文件。
对于LS1046来说,fw_env.config文件中的内容如下:
# MTD device name Device offset Env. size Flash sector size
/dev/mtd0 0x300000 0x2000 0x40000
其中Device offset,Env size和Flash sector size应该分别对应于uboot源码目录中include/configs/xxxx.h相关文件中的
CONFIG_ENV_OFFSET,CONFIG_ENV_SIZE和CONFIG_ENV_SECT_SIZE三个宏定义
以include/configs/ls1046ardb.h为例,我们可以看到
#define CONFIG_ENV_SIZE 0x2000 /* 8KB */
#define CONFIG_ENV_OFFSET 0x300000 /* 3MB */
#define CONFIG_ENV_SECT_SIZE 0x40000 /* 256KB */