在上章-製作文件系統,並使內核成功啟動jffs2文件系統了 本章便開始使內核支持燒寫yaffs2文件系統 1.首先獲取yaffs2源碼(參考git命令使用詳解) 2.將yaffs2源碼來配置到內核里(使內核支持yaffs2) 找到以下幾段話: 參考上圖: 搜索yaffs,找到位於: -> File ...
本章便開始使內核支持燒寫yaffs2文件系統
1.首先獲取yaffs2源碼(參考git命令使用詳解)
cd /work/nfs_root git clone [email protected]:lifeyx/yaffs2.git
//若下載出現error:403,可以試試vi /etc/resolv.conf,將nameserver地址改為: 114.114.114.114
2.將yaffs2源碼來配置到內核里(使內核支持yaffs2)
vi /work/nfs_root/yaffs2/README-linux
找到以下幾段話:
參考上圖:
/*給內核打補丁*/ cd /work/nfs_root/yaffs2/ ./patch-ker.sh c m /work/system/linux-3.4.2//c:將yffs2文件夾copy到linux-3.4.2/fs里, m:指定多版本 /*通過menuconfig,來使內核支持yaffs2*/ cd /work/system/linux-3.4.2/ make menuconfig
搜索yaffs,找到位於:
- -> File systems
- -> Miscellaneous filesystems (MISC_FILESYSTEMS [=y])
- <*> yaffs2 file system support //按Y鍵,使內核支持yaffs2
3.然後make uImage
如下圖所示,出現很多錯誤:
如上圖,問題都是出在fs/yaffs2/下,很多error都講述:調用的成員名,在struct mtd_info結構體里沒有定義.
接下來我們便將fs/yaffs2文件夾添加到內核3.4的si工程中.
3.1然後進入yaffs2/yaffs_vfs.c,第2514行:
然而發現struct mtd_info *mtd的結構體mtd_info定義的是_sync成員,如下圖所示:
3.2 修改代碼
所以接下來只有遇到與struct mtd_info有關的error,都在成員前加上: _
比如:
- 將yaffs_vfs.c文件2514~2515行的mtd->sync 改為: mtd->_sync
- 將yaffs_vfs.c文件2702行的mtd->erase改為: mtd->_erase
- 將yaffs_vfs.c文件2703行的mtd->read改為: mtd->_read
- ... ...
- 並將yaffs_vfs.c的第2967行的 root = d_alloc_root(inode);改為: root = d_make_root(inode);
全部修改後,再次make uImage,接下來便製作yaffs2文件系統
4.製作yaffs2文件系統
由於上章-我們製作了文件系統,名為fs_mini_mdev_new,所以直接使用mkyaffs2image工具製作:
mkyaffs2image fs_mini_mdev_new fs_mini_mdev_new.yaffs2
然後通過uboot來燒寫yaffs2、燒寫uImage:
最後啟動yaffs2成功:
未完待續,下章來裁剪3.4內核,並製作補丁~~