最近公司提了需要使用 fw_printenv fw_setenv的需求。
这个工具的作用是在linux 系统里,查看修改uboot 环境变量。
平台环境 是NUC972。中间过程不是很顺利,走了些弯路,在此记录,分享出来。
关于编译方法,网上也很多了。但在972平台上还是有点区别。废话不多说了
1编译fw_printenv
进入 uboot 目录
1.make nuc970_nand_config
2.修改 tools/env/Makefile
增加 HOSTCC 和 HOSTSTRIP . 这里必须要改。 原来我是在make的时候指定 ARCH 和 CROSS_COMPLIE,但是不起作用,后来没办法修改这个Makefile。
3. 修改,tools/env/fw_env.c
增加 #include <stdint.h>
否则编译的时候报错,找不到 uint8_t 这个类型。
4 编译
在uboot根目录 : make env
在 tools/env 目录下 生成了 fw_printenv. 这个就是我们需要的工具。
把 fw_printenv 和 fw_env.config 考入板子。
fw_env.config 考入 /etc/目录
fw_printenv 考入 /bin
建立一个软连接 fw_setenv
ln -s fw_printenv fw_setenv
2配置
配置 fw_env.config
这里的配置一定要和系统的配置相同。这里走了些歪路。
/dev/mtd0是专门给环境变量分配的分区。Device offset 是只环境变量在此分区上的偏移,不是指在整个nand上的偏移。
环境变量的烧写地址是 0x80000,大小0x10000,block大小是0x20000。这里因为mtd0分区设定了起始地址是0x80000,所以环境变量在此分区上的偏移地址为 0了
3.uboot 修改参数,添加mtd0分区
进入UBOOT后,输入如下命令,
这里有点要注意的,因为添加了一个env 分区,所以原来的rootfs分区变成mtd2了,ubi.mtd要修改为2.
进入系统测试命令:
线查看一下分区。 cat /proc/mtd,没有问题。
执行 fw_printenv
结果报错,Error opening lock file /var/lock/fw_printenv.lock
手工创建 /var/lock
再次运行,成功读出了环境变量