在挂载yaffs2 文件系统出现的问题和解决办法。
还是想来吐槽先: 之前我一直的2.6.36.2 的内核已经可以成功启动OK6410 挂载 NFS 文件系统进入Linux 终端了,这几天因为测试USB 摄像头需要,
所以要进入 yaffs2,这样才不会占用 DM9000 的网卡,才能测试 网络摄像头。本来以为需要进入 yaffs2 文件系统可能会挺简单的,谁知道一大堆问
题,好了,开始进入正题:
最后的打印信息为:
end_request: I/O error, dev mtdblock2, sector 24
Buffer I/O error on device mtdblock2, logical block 3
uncorrectable error :
uncorrectable error :
end_request: I/O error, dev mtdblock2, sector 24
Buffer I/O error on device mtdblock2, logical block 3
List of all partitions:
1f00 1024 mtdblock0 (driver )
1f01 5120 mtdblock1 (driver )
1f02 122880 mtdblock2 (driver )
1f03 1968128 mtdblock3 (driver )
No filesystem could mount root, tried: cramfs
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2)
[
[
[
[
[
[
[
我在网上google了很多,这是最常见的一种错误打印信息。照上面的打印信息,自己推测出现的问题是:
1、NAND Flash 有坏块。
解决办法: 在Uboot 下使用命令 : nand scrub 回车,选择 y ,y 没有显示,直接回车。就可以忽略坏块。
关闭内核 ECC 校验。
在文件 drivers/mtd/nand/s3c_nand.c 文件中,将
nand->ecc.mode = NAND_ECC_SOFT; 改为:
nand->ecc.mode = NAND_ECC_NONE;
配置中去掉的这个选项在代码中并没有完全去掉,只是去掉了硬件校验的方式,换成了软件校验。
只有在代码中给改成NAND_ECC_NONE,才不会校验。
2、 NAND Flash 分区加载不正确。
因为博主刚开始的内核可以加载 NFS 根文件系统,所以基本就排除了这种可能。