1. make menuconfig
添加如下选项:
Device Drivers --->
<*> Memory Technology Device (MTD) support --->
[*] Command line partition table parsing
<*> NAND Device Support --->
<*> NAND Flash support for Samsung S3C SoCs
2.修改 arch/arm/mach-s3c64xx/mach-smdk6410.c
添加头文件:
#include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h>
#include <plat/nand.h>
添加代码:
/*
nandflash
add by fatfish
*/
struct mtd_partition smdk6410_nand_part[] = {
{
.name = "Bootloader",
.offset = 0,
.size = (1 * SZ_1M),
//.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "Kernel",
.offset = (1 * SZ_1M),
.size = (5*SZ_1M) ,
//.mask_flags = MTD_CAP_NANDFLASH,
},
{
.name = "User",
.offset = (6 * SZ_1M),
.size = (120*SZ_1M) ,
},
{
.name = "File System",
.offset = MTDPART_OFS_APPEND,
.size = MTDPART_SIZ_FULL,
}
};
static struct s3c2410_nand_set smdk6410_nand_sets[] = {
[0] = {
.name = "nand",
.nr_chips = 1,
.nr_partitions = ARRAY_SIZE(smdk6410_nand_part),
.partitions = smdk6410_nand_part,
.flash_bbt = 1, /* we use u-boot to create a BBT fatfish*/
},
};
static struct s3c2410_platform_nand smdk6410_nand_info = {
.tacls = 25,
.twrph0 = 55,
.twrph1 = 40,
.nr_sets = ARRAY_SIZE(smdk6410_nand_sets),
.sets = smdk6410_nand_sets,
};
/*adding end*/
static struct platform_device *smdk6410_devices[] __initdata 中添加
&s3c_device_nand,
static void __init smdk6410_map_io(void) 中添加
s3c_device_nand.dev.platform_data = &smdk6410_nand_info;
static void __init smdk6410_machine_init(void) 中添加
s3c_nand_set_platdata(&smdk6410_nand_info);
3.修改drivers/mtd/nand/nand_base.c
switch (mtd->oobsize) {
case 8:
chip->ecc.layout = &nand_oob_8;
break;
case 16:
chip->ecc.layout = &nand_oob_16;
break;
case 64:
chip->ecc.layout = &nand_oob_64;
break;
case 128:
chip->ecc.layout = &nand_oob_128;
break;
/*fatfish add */
case 218:
chip->ecc.layout = &nand_oob_128;
break;
/*adding end*/
default:
pr_warn("No oob scheme defined for oobsize %d\n",
mtd->oobsize);
BUG();
4.修改drivers/mtd/nand/s3c2410.c
chip->ecc.mode = NAND_ECC_SOFT 改为
chip->ecc.mode = NAND_ECC_NONE