前一篇文章,我们的Linux能后启动了,只是在识别nand时候,没有获取到时钟源,导致后面的分区没哟进行。

     我们从启动的log发现:

[06/08-11:25:41:371]s3c24xx-nand s3c6400-nand: failed to get clock
[06/08-11:25:41:371]s3c24xx-nand: probe of s3c6400-nand failed with error –2

  于是追踪到代码:

nandflash驱动中——s3c2410.c中


发现在去find “nand”clock source时,获取不到,因此,我们打开S3c2410.c (drivers\mtd\nand) 

于是打开Clk-s3c64xx.c (drivers\clk\samsung) 

发现在Aliases时,并没有Aliases nand,因此我试着加了以下代码:ALIAS(MEM0_NFCON, "s3c6400-nand", "nand"),

这样的话,当去clk_get时,应该不会有问题了。

这个机制是linux-3.10后才加的,这个问题卡了我好久。

我们make uImage后测试如下:

从上面我们又发现出错以下信息:

[06/08-14:18:34:573]nand: No oob scheme defined for oobsize 218

[06/08-14:18:34:573]------------[ cut here ]------------

[06/08-14:18:34:574]kernel BUG at drivers/mtd/nand/nand_base.c:3732!

原来是我们的nandflash的oobsize是218,而nand_base.c中并没有加入218的处理,因此参照6410驱动,修改nand_base.c。做如下添加:

1. 添加nand_oob_218定义

2. 添加case 218处理

    好了,我们再次 make uImage后,下载到板子上,启动如下:

     上面红色部分,代表nandflash已经可以识别并可以读写,已经看到分区信息。只是会有cut here,不过这个bug不影响我们的启动,如果不想看到该打印信息,我们只需要这make menucong中配置kernel hacking中设置printk level为7,默认为4即可。
     后面我们就开始做yaffs2文件系统了,并配置内核支持yaffs2文件系统。
posted on 2014-06-08 14:33  程序马  阅读(997)  评论(1编辑  收藏  举报