在smdk2440.h里面加上NAND的配置选项
#define CONFIG_CMD_NAND
编译出错
drivers/mtd/nand/s3c2410_nand.c: In function 's3c2410_hwcontrol':drivers/mtd/nand/s3c2410_nand.c:44: warning: implicit declaration of function 's3c2410_get_base_nand'drivers/mtd/nand/s3c2410_nand.c:44: warning: initialization makes pointer from integer without a castdrivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete typedrivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete typedrivers/mtd/nand/s3c2410_nand.c:62: error: dereferencing pointer to incomplete type
cp drivers/mtd/nand/s3c2410_nand.c drivers/mtd/nand/s3c2440_nand.c
在drivers/mtd/nand/Makefile添加
COBJS-$(CONFIG_NAND_S3C2410) += s3c2410_nand.oCOBJS-$(CONFIG_NAND_S3C2440) += s3c2440_nand.o
同时需要修改配置文件smdk2440.h
/** NAND configuration*/#ifdef CONFIG_CMD_NAND#define CONFIG_NAND_S3C2410 == >#define CONFIG_NAND_S3C2440 #define CONFIG_SYS_S3C2410_NAND_HWECC ==>#define CONFIG_SYS_S3C2440_NAND_HWECC
在drivers/mtd/nand/s3c2440_nand.c
nt board_nand_init(struct nand_chip *nand)#if 0cfg = S3C2440_NFCONF_EN;cfg |= S3C2440_NFCONF_TACLS(tacls - 1);cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);#endifcfg = ((tacls-1)<<12)|((twrph0-1)<<8)|((twrph1-1)<<4);writel(cfg, &nand_reg->nfconf);writel((1<<4)|(1<<1)|(1<<0),&nand_reg->nfcont);。。。nand->select_chip = s3c2440_nand_select;
添加
static void s3c2440_nand_select(struct mtd_info *mtd, int chipnr){struct s3c2440_nand *nand = s3c2440_get_base_nand();switch (chipnr) {case -1:nand->nfcont |= (1<<1);break;case 0:nand->nfcont &= ~(1<<1);break;default:BUG();}}
重写
static void s3c2440_hwcontrol(struct mtd_info *mtd, int dat, unsigned int ctrl){struct s3c2440_nand *nand = s3c2440_get_base_nand();if (ctrl & NAND_CLE){writeb(dat, &nand->nfcmd);}else if(ctrl & NAND_ALE){writeb(dat, &nand->nfaddr);}}
重写编译烧录
U-Boot .10 (Nov 01 - 14:26:34)CPUID: 32440001FCLK:400 MHzHCLK:100 MHzPCLK: 50 MHzDRAM: 64 MiBWARNING: Caches not enabledFlash: 2 MiBNAND: 256 MiB*** Warning - bad CRC, using default environmentIn: serialOut: serialErr: serialNet: dm9000Warning: dm9000 MAC addresses don't match:Address in SROM is ff:ff:ff:ff:ff:ffAddress in environment is 00:0c:29:45:c4:c3
增加启动参数
在smdk2440.h里面添加宏
#define CONFIG_BOOTCOMMAND "nand read.jffs2 0x30007FC0 0x60000 0x200000; bootm 0x30007FC0"
如果以前烧写过内核到0x60000的位置,那么现在可以顺利从nor flash启动内核