分析发现uboot env的存储格式是,开始4个字节是crc32,后面是一个接一个\0结束的字符串,每个串都是envname=enavalue的格式。
挪用uboot部分的相关代码,实现以下函数:
int set_env_ptr(unsigned char * ptr);
char *get_env (char *name);
int set_env (char *varname, char *varvalue);
int printenv(void);

使用时,我们读取env分区的数据到内存;
调用set_env_ptr(数据指针),该函数会进行crc校正确保env分区正确,并且返回0;
get_env, set_env, printenv相应uboot 中的echo $envname; setenv envname envstr; printenv

Usage: ./uboot_env read|set [envname] [value] -i envp_w_picpath -o outp_w_picpath

附件是代码,main.c是测试代码