在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 cast
drivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete type
drivers/mtd/nand/s3c2410_nand.c:59: error: dereferencing pointer to incomplete type
drivers/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.o
COBJS-$(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 0
cfg = S3C2440_NFCONF_EN;
cfg |= S3C2440_NFCONF_TACLS(tacls - 1);
cfg |= S3C2440_NFCONF_TWRPH0(twrph0 - 1);
cfg |= S3C2440_NFCONF_TWRPH1(twrph1 - 1);
#endif
cfg = ((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 2014.10 (Nov 01 2018 - 14:26:34)
CPUID: 32440001
FCLK: 400 MHz
HCLK: 100 MHz
PCLK: 50 MHz
DRAM: 64 MiB
WARNING: Caches not enabled
Flash: 2 MiB
NAND: 256 MiB
*** Warning - bad CRC, using default environment
In: serial
Out: serial
Err: serial
Net: dm9000
Warning: dm9000 MAC addresses don't match:
Address in SROM is ff:ff:ff:ff:ff:ff
Address 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启动内核