作者
QQ群:852283276
微信:arm80x86
微信公众号:青儿创客基地
B站:主页 https://space.bilibili.com/208826118
linux应用访问u-boot环境变量
在uboot的tools/env目录下提供了linux访问环境变量的工具fw_printenv和fw_setenv,配置头文件fw_env.h,
设置CONFIG_FILE从配置文件读取环境变量所在位置,HAVE_REDUND表示使用冗余环境变量,这里都选上,CONFIG_FILE内容为,
# Configuration file for fw_(printenv/setenv) utility.
# Up to two entries are valid, in this case the redundant
# environment sector is assumed present.
# Notice, that the "Number of sectors" is not required on NOR and SPI-dataflash.
# Futhermore, if the Flash sector size is omitted, this value is assumed to
# be the same as the Environment size, which is valid for NOR and SPI-dataflash
# Device offset must be prefixed with 0x to be parsed as a hexadecimal value.
# NOR example
# MTD device name Device offset Env. size Flash sector size Number of sectors
/dev/mtd1 0x0000 0x20000 0x20000
/dev/mtd2 0x0000 0x20000 0x20000
# MTD SPI-dataflash example
# MTD device name Device offset Env. size Flash sector size Number of sectors
#/dev/mtd5 0x4200 0x4200
#/dev/mtd6 0x4200 0x4200
# NAND example
#/dev/mtd0 0x4000 0x4000 0x20000 2
# On a block device a negative offset is treated as a backwards offset from the
# end of the device/partition, rather than a forwards offset from the start.
# Block device example
#/dev/mmcblk0 0xc0000 0x20000
#/dev/mmcblk0 -0x20000 0x20000
# VFAT example
#/boot/uboot.env 0x0000 0x4000
这里配置了/dev/mtd1和/dev/mtd2互为备份。编译完之后测试发现没有切换分区,由于之前没改代码之前编译过,执行rm *.o *.a fw_printenv
,再编译就可以了,fw_setenv失败后会用默认环境变量覆盖原有环境变量,这很怕人啊,待解决。
Warning: Bad CRC, using default environment
宏和环境变量的值应该一样#define CONFIG_ENV_OFFSET_REDUND 0xe0000
,默认环境变量由数组const uchar default_environment[]
定义,不同版本的u-boot该数组位置可能不一样。
编译
env tools是在板卡上运行的,需要交叉编译,
override HOSTCC=$(CC)