1. 程式人生 > >移植kernel-3.10.79 (1) 支持 yaffs

移植kernel-3.10.79 (1) 支持 yaffs

try driver 使用 div sce cell source linux mis

網站: http://www.yaffs.net/
獲取方法: 執行git clone git://www.aleph1.co.uk/yaffs2
解壓:tar zxf yaffs_source.tar.gz
打補丁:

#cd /work/tmp/yaffs2 // cd yaffs-dir
#./patch-ker.sh c m ~/mini2440/linux-3.10.79 // ./patch-ker.sh c m linux-tree
make menuconfig
    
    File Systems
    ---> Miscellaneous filesystems
        ---> [*]YAFFS2 file system support
    make uImage

出錯:fs/yaffs2/yaffs_vfs.c:3398: error: implicit declaration of function ‘create_proc_entry‘

原因:編譯fs/yaffs2/yaffs_vfs.c時出現錯誤,function ‘create_proc_entry‘沒有申明。
原來這個接口在linux-3.10被刪除了,應該使用proc_create代替。

修改:

vim fs/yaffs2/yaffs_vfs.c

#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,12,0)) 修改為#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,10,0))
    #define
YAFFS_NEW_PROCFS #include <linux/seq_file.h> #endif

問題2:
end_request: I/O error, dev mtdblock4, sector 0
移植內核時出現了這種錯誤,這種錯誤通常是由校驗造成的.這種情況的解決辦法為:

禁止Flash ECC校驗
我們的內核都是通過UBOOT寫到Nand Flash的, UBOOT通過的軟件ECC算法產生ECC校驗碼, 這與內核校驗的ECC碼不一樣, 內核中的ECC碼是由S3C2410中Nand Flash控制器產生的. 所以, 我們在這裏選擇禁止內核ECC校驗.
修改drivers/mtd/nand/s3c2410.c 文件:
vi drivers/mtd/nand/s3c2410.c
找到s3c2410_nand_init_chip()函數,在該函數體最後加上一條語句:

chip->ecc.mode = NAND_ECC_NONE;

移植kernel-3.10.79 (1) 支持 yaffs