设为首页 加入收藏

TOP

【已解决】*** Warning - bad CRC or NAND, using default environment(二)
2014-11-24 14:12:38 来源: 作者: 【 】 浏览:1
Tags:解决 Warning bad CRC NAND using default environment
境变量,同时,也会每次都提示你


*** Warning - bad CRC or NAND, using default environment,此时,你就再直接把那行打印注释掉,就可以了。。。,虽然做法不雅,但是还是可以实现目的的。。。


【总结】


一句话,只要有源码,就没有解决不了的问题。一切问题,参考源码,都能找到根本原因。


此处对于arm+nand来说,具体涉及的文件和函数,总结如下:


1. lib_arm\board.c


void start_armboot (void)
{


。。。


for (init_fnc_ptr = init_sequence; *init_fnc_ptr; ++init_fnc_ptr) {
if ((*init_fnc_ptr)() != 0) { //此处会去调用env_init()
hang ();
}
}


。。。


/* initialize environment */
env_relocate ();


。。。


}


2.对于env_init(),此处因为指定的是CONFIG_ENV_IS_IN_NAND,所以对应着:


common\env_nand.c:


int env_init(void)
{


。。。


gd->env_valid = 1;


。。。


}


3.common\env_common.c:


void env_relocate (void)
{


。。。


if (gd->env_valid == 0) {
#if defined(CONFIG_GTH) || defined(CONFIG_ENV_IS_NOWHERE) /* Environment not changable */
puts ("Using default environment\n\n");
#else
puts ("*** Warning - bad CRC, using default environment\n\n");
show_boot_progress (-60);
#endif
set_default_env();
}
else {
env_relocate_spec ();
}
。。。


}


4.此处的env_relocate_spec,这里对应的是common\env_nand.c:


void env_relocate_spec (void)
{
#if !defined(ENV_IS_EMBEDDED)
int ret;


ret = readenv(CONFIG_ENV_OFFSET, (u_char *) env_ptr);
if (ret)
return use_default();


if (crc32(0, env_ptr->data, ENV_SIZE) != env_ptr->crc)
return use_default();
#endif /* ! ENV_IS_EMBEDDED */
}


5.对于数据读取有误或者读出来的数据crc32有误的话,都会调用common\env_nand.c:


static void use_default()
{
puts ("*** Warning - bad CRC or NAND, using default environment\n\n");
set_default_env();
}


因此才会提示有误。OK,总结完毕。有问题,最好自己跟踪代码,最后都是可以搞定的。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇移植U-Boot-2009.08到mini2440(三.. 下一篇给Openbox 装上 Gnome的程序菜单

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: