linux-4.1.15移植yaffs2

1. download yaffs2源码

git clone git://www.aleph1.co.uk/yaffs2

2. patch到linux4.1.15 内核

cd yaffs2

./patch-ker.sh c m /home/diskf/home/hyj/imx6ul-qt5.6/linux-4.1.15

3. 直接修改目标deconfig文件 后编译进kernel


4. 或是通过make menuconfig 选择yaffs2后保存到.config 后再编译进内核

File systems --->

  Miscellaneous filesystems  --->

   <*>   yaffs2 file system support

5. 编译内核

此时会有很多报错:

fs/yaffs2/yaffs_vfs.c: In function 'yaffs_readpage_nolock':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro 'yaffs_inode_to_obj'
 #define yaffs_dentry_to_obj(dptr) yaffs_inode_to_obj((dptr)->d_inode)
                                   ^
fs/yaffs2/yaffs_vfs.c:309:8: note: in expansion of macro 'yaffs_dentry_to_obj'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
        ^
fs/yaffs2/yaffs_vfs.c:309:28: note: in expansion of macro 'Y_GET_DENTRY'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
                            ^
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_hold_space':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro 'yaffs_inode_to_obj'
 #define yaffs_dentry_to_obj(dptr) yaffs_inode_to_obj((dptr)->d_inode)
                                   ^
fs/yaffs2/yaffs_vfs.c:507:8: note: in expansion of macro 'yaffs_dentry_to_obj'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
        ^
fs/yaffs2/yaffs_vfs.c:507:28: note: in expansion of macro 'Y_GET_DENTRY'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
                            ^
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_release_space':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro 'yaffs_inode_to_obj'
 #define yaffs_dentry_to_obj(dptr) yaffs_inode_to_obj((dptr)->d_inode)
                                   ^
fs/yaffs2/yaffs_vfs.c:525:8: note: in expansion of macro 'yaffs_dentry_to_obj'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
        ^
fs/yaffs2/yaffs_vfs.c:525:28: note: in expansion of macro 'Y_GET_DENTRY'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
                            ^
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_file_write':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro 'yaffs_inode_to_obj'
 #define yaffs_dentry_to_obj(dptr) yaffs_inode_to_obj((dptr)->d_inode)
                                   ^
fs/yaffs2/yaffs_vfs.c:617:8: note: in expansion of macro 'yaffs_dentry_to_obj'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
        ^
fs/yaffs2/yaffs_vfs.c:617:28: note: in expansion of macro 'Y_GET_DENTRY'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
                            ^
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:629:10: note: in expansion of macro 'Y_GET_DENTRY'
  inode = Y_GET_DENTRY(f)->d_inode;
          ^
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_file_flush':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro '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: in expansion of macro 'yaffs_dentry_to_obj'
  struct yaffs_obj *obj = yaffs_dentry_to_obj(Y_GET_DENTRY(file));
                          ^
fs/yaffs2/yaffs_vfs.c:753:46: note: in expansion of macro 'Y_GET_DENTRY'
  struct yaffs_obj *obj = yaffs_dentry_to_obj(Y_GET_DENTRY(file));
                                              ^
fs/yaffs2/yaffs_vfs.c: At top level:
fs/yaffs2/yaffs_vfs.c:804:10: error: 'new_sync_read' undeclared here (not in a function)
  .read = new_sync_read,
          ^
fs/yaffs2/yaffs_vfs.c:805:11: error: 'new_sync_write' undeclared here (not in a function)
  .write = new_sync_write,
           ^
fs/yaffs2/yaffs_vfs.c:1063:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
  .getxattr = yaffs_getxattr,
              ^
fs/yaffs2/yaffs_vfs.c:1063:14: note: (near initialization for 'yaffs_file_inode_operations.getxattr')
fs/yaffs2/yaffs_vfs.c:1192:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
  .getxattr = yaffs_getxattr,
              ^
fs/yaffs2/yaffs_vfs.c:1192:14: note: (near initialization for 'yaffs_symlink_inode_operations.getxattr')
fs/yaffs2/yaffs_vfs.c:1674:14: warning: initialization from incompatible pointer type [-Wincompatible-pointer-types]
  .getxattr = yaffs_getxattr,
              ^
fs/yaffs2/yaffs_vfs.c:1674:14: note: (near initialization for 'yaffs_dir_inode_operations.getxattr')
fs/yaffs2/yaffs_vfs.c: In function 'yaffs_iterate':
fs/yaffs2/yaffs_vfs.c:260:29: error: 'struct file' has no member named 'f_dentry'
 #define Y_GET_DENTRY(f) ((f)->f_dentry)
                             ^
fs/yaffs2/yaffs_vfs.c:218:39: note: in definition of macro 'yaffs_inode_to_obj_lv'
 #define yaffs_inode_to_obj_lv(iptr) ((iptr)->i_private)
                                       ^
fs/yaffs2/yaffs_vfs.c:225:35: note: in expansion of macro '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: in expansion of macro 'yaffs_dentry_to_obj'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
        ^
fs/yaffs2/yaffs_vfs.c:1806:28: note: in expansion of macro 'Y_GET_DENTRY'
  obj = yaffs_dentry_to_obj(Y_GET_DENTRY(f));
                            ^
make[2]: *** [fs/yaffs2/yaffs_vfs.o] Error 1
make[2]: *** Waiting for unfinished jobs....
  CC      fs/fhandle.o
make[1]: *** [fs/yaffs2] Error 2
make[1]: *** Waiting for unfinished jobs....
make: *** [fs] Error 2

make: *** Waiting for unfinished jobs....

接下来解决报错问题:

1) error: 'struct file' has no member named '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) error: 'new_sync_read' undeclared here (not in a function) and error: 'new_sync_write' undeclared here (not in a function)

对比一下fs/ext3/file.c中的51行左右,将fs/yaffs2/yaffs_vfs.c中的804行左右修改如下:4.1.15版本的kernel已经不存在注释掉的两个函数了



这样修改后编译通过。


猜你喜欢

转载自blog.csdn.net/hanpca/article/details/80220929