uboot之Saveenv(20120401)

 

一、调用流程。

env_init()

int env_init(void)
{
gd->env_addr    = (ulong)&default_environment[0];
gd->env_valid    = 0;

return 0;
}

==>env_relocate();

void env_relocate(void)
{
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
env_reloc();
#endif
if (gd->env_valid == 0) {
#if defined(CONFIG_ENV_IS_NOWHERE)    /* Environment not changable */
set_default_env(NULL);
#else
bootstage_error(BOOTSTAGE_ID_NET_CHECKSUM);
set_default_env("!bad CRC");
#endif
} else {
env_relocate_spec();
}
}

这里有一个

bootstage_error(BOOTSTAGE_ID_NET_CHECKSUM);(bootstage.c)
是什么作用呢?

当第二次开机的时候就会执行:env_relocate_spec,
这个函数将会从nor or nand flash load boot envrionment(By call env_import func)
Then if check CRC failed, set_default_env func will be called.



二、和saveenv相关的宏定义

#define CONFIG_SYS_NO_FLASH 1
#define CONFIG_CMD_SAVEENV 1
#define CONFIG_ENV_OFFSET 0x00010000
#define ENV_PART_NAME "bootenv"
#define OFFSET_IN_ENV_PART 0x000000
#define CONFIG_ENV_SIZE (16*1024)

 

 



 

posted @ 2015-09-26 11:26  JustRelax  阅读(751)  评论(0编辑  收藏  举报