1.下载yaffs2源码
git clone git://www.aleph1.co.uk/yaffs2
2.补丁到linux4.1.15内核
cd yaffs2
./patch-ker.sh cm ~/home/xxx/imx6ul-qt5.6/linux-4.1.15(这里根据你内核的路径进行修改)
3.直接修改目标deconfig文件后编译进内核
4.或是通过make menuconfig选择yaffs2后保存到.config后再编译进内核
文件系统--->
杂项文件系统--->
<*> yaffs2文件系统支持
编译内核
此时会有很多报错:
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_readpage_nolock'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY(f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:在定义宏'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - > i_private)
^
fs / yaffs2 / yaffs_vfs.c:225: 35:注意:扩展宏'yaffs_inode_to_obj'
#define yaffs_dentry_to_obj(dptr)yaffs_inode_to_obj((dptr) - > d_inode)
^
fs / yaffs2 / yaffs_vfs.c:309:8:注意:扩展宏'yaffs_dentry_to_obj'
obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:309:28:注意:在扩展宏'Y_GET_DENTRY'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_hold_space'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY(f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:宏定义'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - > i_private)
^
fs / yaffs2 / yaffs_vfs.c:225 :35:注意:扩展宏'yaffs_inode_to_obj'
^
fs / yaffs2 / yaffs_vfs.c:507:8:注意:在扩展宏'yaffs_dentry_to_obj'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:507:28:注意:在扩展宏'Y_GET_DENTRY'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_release_space'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY(f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:宏定义'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - > i_private)
^
fs / yaffs2 / yaffs_vfs.c:225:35:注意:扩展宏'yaffs_inode_to_obj'
#define yaffs_dentry_to_obj(dptr)yaffs_inode_to_obj((dptr) - > d_inode)
^
fs / yaffs2 / yaffs_vfs.c:525:8:注意:在扩展宏'yaffs_dentry_to_obj'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:525:28:注意:在扩展宏'Y_GET_DENTRY'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_file_write'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:宏定义'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - > i_private)
^
fs / yaffs2 / yaffs_vfs.c:225:35:note :扩展宏'yaffs_inode_to_obj'
#define yaffs_dentry_to_obj(dptr)yaffs_inode_to_obj((dptr) - > d_inode)
^
fs / yaffs2 / yaffs_vfs.c:617:8:注意:扩展宏'yaffs_dentry_to_obj'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY) (F));
^
fs / yaffs2 / yaffs_vfs.c:617:28:注意:在扩展宏'Y_GET_DENTRY'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY(f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:629: 10:注意:在扩展宏'Y_GET_DENTRY'inode
= Y_GET_DENTRY(f) - > d_inode;
^
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_file_flush'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY(f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:定义宏'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - >
fs / yaffs2 / yaffs_vfs.c:225:35:注意:扩展宏'yaffs_inode_to_obj'
#define yaffs_dentry_to_obj(dptr)yaffs_inode_to_obj((dptr) - > d_inode)
^
fs / yaffs2 / yaffs_vfs.c:753:26:note :在扩展宏'yaffs_dentry_to_obj'struct
yaffs_obj * obj = yaffs_dentry_to_obj(Y_GET_DENTRY(file));
^
fs / yaffs2 / yaffs_vfs.c:753:46:注意:在扩展宏'Y_GET_DENTRY'时,
结构yaffs_obj * obj = yaffs_dentry_to_obj(Y_GET_DENTRY(file));
^
fs / yaffs2 / yaffs_vfs.c:顶级:
fs / yaffs2 / yaffs_vfs.c:804:10:错误:'new_sync_read'未声明此处(不在函数中)
.read = new_sync_read,
^
fs / yaffs2 / yaffs_vfs.c:805:11:错误:'new_sync_write'在这里未声明(不在函数中)
.write = new_sync_write,
^
fs / yaffs2 / yaffs_vfs.c:1063:14:警告:从不兼容的指针初始化type [-Wincompatible-pointer-types]
.getxattr = yaffs_getxattr,
^
fs / yaffs2 / yaffs_vfs.c:1063:14:note :(接近初始化'yaffs_file_inode_operations.getxattr')
fs / yaffs2 / yaffs_vfs.c:1192:14 :警告:从不兼容的指针类型初始化[-Wincompatible-pointer-types]
.getxattr = yaffs_getxattr,
^
fs / yaffs2 / yaffs_vfs.c:1192:14:note :(接近初始化'yaffs_symlink_inode_operations.getxattr')
fs / yaffs2 / yaffs_vfs.c:1674:14:警告:从不兼容的指针类型初始化[-Wincompatible-pointer-types]
.getxattr = yaffs_getxattr,
^
fs / yaffs2 / yaffs_vfs.c:1674:14:注意:(接近初始化对于'yaffs_dir_inode_operations.getxattr')
fs / yaffs2 / yaffs_vfs.c:在函数'yaffs_iterate'中:
fs / yaffs2 / yaffs_vfs.c:260:29:错误:'struct file'没有名为'f_dentry'的成员
#define Y_GET_DENTRY( f)((f) - > f_dentry)
^
fs / yaffs2 / yaffs_vfs.c:218:39:注意:宏定义'yaffs_inode_to_obj_lv'
#define yaffs_inode_to_obj_lv(iptr)((iptr) - > i_private)
^
fs / yaffs2 / yaffs_vfs.c:225:35:注意:扩展宏'yaffs_inode_to_obj'
#define yaffs_dentry_to_obj(dptr)yaffs_inode_to_obj((dptr) - > d_inode)
^
fs / yaffs2 / yaffs_vfs.c:1806:8:note :在扩展宏'yaffs_dentry_to_obj'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
fs / yaffs2 / yaffs_vfs.c:1806:28:注意:在扩展宏'Y_GET_DENTRY'obj
= yaffs_dentry_to_obj(Y_GET_DENTRY(f));
^
make [2]:*** [fs / yaffs2 / yaffs_vfs.o]错误1
make [2]:***等待未完成的工作....
CC fs / fhandle.o
make [1]:*** [fs / yaffs2]错误2
make [1]:***等待未完成的工作....
make:*** [fs]错误2
make:***等待未完成的工作....
接下来解决报错问题:
1)错误:'struct file'没有名为'f_dentry'的成员
cd fs / yaffs2
sed's / f_dentry / f_path.dentry / g'yaffs_vfs.c> yaffs_vfsbak.c
mv yaffs_vfsbak.c yaffs_vfs.c
2)错误:'new_sync_read'在这里未声明(不在函数中)和错误:'new_sync_write'在这里未声明(不在函数中)
对比一下FS / EXT3 / file.c中的51行左右,将FS / YAFFS2 / yaffs_vfs.c中的804行左右修改如下:4.1.15版本的内核已经不存在注释掉的两个函数了
这样修改后编译通过。