完全按照这个来就可以解决了
按照网上的教程移植uboot2009.08到ok2440,移植到从nandflash启动这步,无论如何saveenv时都是保存到flash。 问题:
my2440.h文件中nandflash设置部分: #if defined(CONFIG_CMD_NAND)
#define CONFIG_SYS_NAND_BASE 0x4e000000 #define CONFIG_SYS_MAX_NAND_DEVICE 1 #define CONFIG_MTD_NAND_VERIFY_WRITE 1
#define NAND_SAMSUNG_LP_OPTIONS 1 //大页要添加这个 #define CONFIG_NAND_S3C2440 1 #define CONFIG_S3C2440_NAND_BOOT 1 #undef CONFIG_ENV_IS_IN_FLASH
#define CONFIG_ENV_IS_IN_NAND 1 /* 环境变量的保存位置 */ #define NAND_CTL_BASE 0x4E000000 #define oNFCONF 0x00 #define oNFCONT 0x04 #define oNFADDR 0x0c #define oNFDATA 0x10 #define oNFCMD 0x08 #define oNFSTAT 0x20 #define oNFECC 0x2c
#define CONFIG_ENV_OFFSET 0x40000 #define CONFIG_ENV_SIZE 0x20000 #endif
我设置了#define CONFIG_ENV_IS_IN_NAND 1 可是启动时还是
Saving Environment to Flash...
Error: start and/or end address not on sector boundary 解决过程:
Saving.....师傅跟我说是common/cmd_nvedit.c里的, 开始找,在其前面加了这句
#if defined(CONFIG_ENV_IS_IN_NAND)
printf(\#else
printf(\#endif
Error...这句是cmd_flash里的 找之,在其前面加上上面代码 结果启动时竟然
Have defined CONFIG_ENV_IS_IN_NAND
Saving Environment to Flash...
Have defined CONFIG_ENV_IS_IN_NAND
Error: start and/or end address not on sector boundary 有点崩溃。。 改common/Makefile
把添加env_flash.c这行去了
编译,启动,还是一样!!!!!!!!!!!!!!!! 崩溃。
又想了好久,这次得来狠的,
直接把common/cmd_nvedit.c输出Saving。。。。这句话前面加上env_name_spec=\
把return (saveenv() ? 1 : 0);改成return (saveenv_nand()?1:0); 再在开头extern 声明一下saveenv_nand这个函数,
把common/env_nand.c中的saveenv函数名改成saveenv_nand
编译,终于有错误了,说common/libcommon.a里还有env_flash.o,还重复定义很多函数
终于找着元凶了,果断把libcommon.a删了 编译,通过,启动板子,保存到nandflash上了 还原函数
还是能够保存到nandflash上,折腾了几天,终于搞定了。