Yuhang Zheng

使用fw_printenv修改uboot环境变量

N 人看过

最近遇到一个问题,有客户想要使用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 */