首页 > 技术知识 > 正文

【海思内核驱动篇】-(5)env工具

env是和uboot一个分区,并且是通过设定偏移量保存的,所以有时候可以上层需要保存env变量来通知uboot事件,比如上层升级事件来显示logo等。

1 宏定义

我们知道海思uboot头文件里面保存有默认的环境变量。并且有如下定义:

include\configs\hi3519av100.h

/*allow change env*/

#define CONFIG_ENV_OVERWRITE

#define CONFIG_COMMAND_HISTORY

/* env in flash instead of CFG_ENV_IS_NOWHERE */

#define CONFIG_ENV_OFFSET 0x80000 /* environment starts here */

#define CONFIG_ENV_SIZE 0x40000

#define CONFIG_ENV_SECT_SIZE 0x10000

#define CONFIG_ENV_VARS_UBOOT_CONFIG

从CONFIG_ENV_OFFSET偏移量可以是在uboot分区,偏移CONFIG_ENV_OFFSET开始写入的,也就是说uboot大小不能操作这个偏移量(512K).

2 默认环境变量

include\env_default.h中default_environment定义

3 fw_setenv工具

直接在uboot下编译即可:源码:tools\env\

在u-boot-2016.11根目录下:

make ARCH=arm CROSS_COMPILE=arm-himix200-linux- env

fw_env.config配置如下:

/etc # cat fw_env.config

# Configuration file for fw_(printenv/saveenv) utility.

# Up to two entries are valid, in this case the redundant

# environment sector is assumed present.

# Notice, that the “Number of sectors” is ignored on NOR.

# MTD device name Device offset Env. size Flash sector size Number of sectors

#/dev/mtd1 0x0000 0x4000 0x4000

#/dev/mtd2 0x0000 0x4000 0x4000

# NAND example

/dev/mtd0 0x4000 0x4000 0x20000 2

char cmdStr[128] = {0};

sprintf(cmdStr,”/usr/bin/fw_setenv %s %s”,”flag”, “hi_flag=1”);

system(cmdStr);

猜你喜欢