根據《Mini2440_Linux移植開(kāi)發(fā)實(shí)戰指南》一文進(jìn)行nandflash驅動(dòng)的移植出現了不少問(wèn)題
而 通過(guò)內核打印信息+Source Insight查找到輸出
S3C24XX NAND Driver, (c) 2004 Simtec Electronics
s3c24xx-nand s3c2440-nand:
Tacls=4, 39ns Twrph0=8 79ns, Twrph1=8 79ns語(yǔ)句信息的函數在內核源碼中nand flash驅動(dòng)程序里的drivers/mtd/nand/s3c2410.c文件中。
分析Linux內核中的nand flash驅動(dòng)drivers/mtd/nand/s3c2410.c文件中的相應函數,
其中的static int s3c2410_nand_setrate(struct s3c2410_nand_info *info)函數發(fā)現:
struct s3c2410_platform_nand *plat = info->platform;
int
tacls_max = (info->cpu_type == TYPE_S3C2412) ? 8 : 4; …………
info->clk_rate = clkrate;
clkrate /= 1000; /* turn clock into kHz for ease of use */
if (plat != NULL) { tacls = s3c_nand_calc_rate(plat->tacls, clkrate, tacls_max);
twrph0 = s3c_nand_calc_rate(plat->twrph0, clkrate, 8);
twrph1 = s3c_nand_calc_rate(plat->twrph1, clkrate, 8);
} else { /* default timings */
tacls = tacls_max;
twrph0 = 8;
twrph1 = 8; }
if (tacls < 0 || twrph0 < 0 || twrph1 < 0) {
dev_err(info->device, "cannot get suitable timings\n");
return -EINVAL;
}
dev_info(info->device, "Tacls=%d, %dns Twrph0=%d %dns, Twrph1=%d %dns\n",
tacls, to_ns(tacls, clkrate), twrph0, to_ns(twrph0, clkrate), twrph1, to_ns(twrph1, clkrate));
由以上內容可以看出,內核并沒(méi)有使用我們的mini2440_nand_info結 構體中的配置,而是使用了它的默認配給,即
} else { /* default timings */
tacls = tacls_max;
twrph0 = 8;
twrph1 = 8; }
中的配置信 息。這點(diǎn)和我們改的內核輸出s3c24xx-nand s3c2440-nand:
Tacls=4, 39ns Twrph0=8 79ns, Twrph1=8 79ns完全符合。
因此可以判斷我們需要在mach-mini2440.c的mini2440_machine_init()函數中增加s3c_device_nand.dev.platform_data = &mini240_nand_info;
http://xliuning.spaces.live.com/blog/cns!C9DB9E35C9DE3752!329.entry