歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

在掛載yaffs2 文件系統出現的問題和解決辦法

在掛載yaffs2 文件系統出現的問題和解決辦法。

還是想來吐槽先: 之前我一直的2.6.36.2 的內核已經可以成功啟動OK6410 掛載 NFS 文件系統進入Linux 終端了,這幾天因為測試USB 攝像頭需要,

所以要進入 yaffs2,這樣才不會占用 DM9000 的網卡,才能測試 網絡攝像頭。本來以為需要進入 yaffs2 文件系統可能會挺簡單的,誰知道一大堆問

題,好了,開始進入正題:

我的操作環境是: 主機:xp, VMware Ubuntu 10.10 。 開發板: OK6410 , 2G nand flash ,4 個分區。   移植內核:Linux 2.6.36.2

先說說我的內核啟動 yaffs2 的前提: 內核可以啟動 NFS 根文件系統, 內核 已經打上了yaffs2 文件系統的補丁。可以參考:http://www.linuxidc.com/Linux/2012-05/61322.htm 這篇文章給內核打上 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)
[<c0039b20>] (unwind_backtrace+0x0/0xf8) from [<c0037b9c>] (dump_stack+0x18/0x1c)
[<c0037b9c>] (dump_stack+0x18/0x1c) from [<c004e100>] (panic+0x64/0x1c4)
[<c004e100>] (panic+0x64/0x1c4) from [<c00090fc>] (mount_block_root+0x1b0/0x258)
[<c00090fc>] (mount_block_root+0x1b0/0x258) from [<c0009270>] (mount_root+0xcc/0xf4)
[<c0009270>] (mount_root+0xcc/0xf4) from [<c00093e4>] (prepare_namespace+0x14c/0x1ac)
[<c00093e4>] (prepare_namespace+0x14c/0x1ac) from [<c00089c0>] (kernel_init+0x118/0x164)
[<c00089c0>] (kernel_init+0x118/0x164) from [<c0034a20>] (kernel_thread_exit+0x0/0x8)

我在網上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 根文件系統,所以基本就排除了這種可能。

Copyright © Linux教程網 All Rights Reserved