参考了uboot2010.03的移植,然后自己对其中的问题进行了跟踪,最后问题解决了.
在移植uboot2010.06时,直接copy了drivers/mtd/nand/s3c2410.c文件,而文件中
s3c2410_hwcontrol函数对chip->IO_ADDR_W进行了修改,所以造成了写出错.
然后自己再跟踪了一下chip->IO_ADDR_W的值
在drivers/mtd/nand/Nand.c中
nand_init_chip函数对chip->IO_ADDR_W进行了初始化,如下:
nand->IO_ADDR_R = nand->IO_ADDR_W = (void __iomem *)base_addr;
再来看看base_addr的定义:
static ulong base_address[CONFIG_SYS_MAX_NAND_DEVICE] = CONFIG_SYS_NAND_BASE_LIST;
#define CONFIG_SYS_NAND_BASE_LIST { CONFIG_SYS_NAND_BASE }
其中CONFIG_SYS_NAND_BASE是我们移植的时候定义的宏
#define CONFIG_SYS_NAND_BASE 0x4E000000
而在s3c2410_hwcontrol函数中
if (!(ctrl & NAND_CLE))
IO_ADDR_W |= S3C2410_ADDR_NCLE;
if (!(ctrl & NAND_ALE))
IO_ADDR_W |= S3C2410_ADDR_NALE;
chip->IO_ADDR_W = (void *)IO_ADDR_W;
修改了chip->IO_ADDR_W的值,所以造成saveenv时写入出错