linux-4.1.15移植yaffs2 之编译

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文件后编译进内核

linux-4.1.15移植yaffs2 之编译

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'的成员

linux-4.1.15移植yaffs2 之编译

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版本的内核已经不存在注释掉的两个函数了

linux-4.1.15移植yaffs2 之编译

 

这样修改后编译通过。