The YAFFS2 update is slower and can not keep up with the kernel's update speed. So you just have to make some changes.
Just beginning to download from the official website of the direct patching will appear a series of errors. as follows:
**fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_readpage_nolock ': fs/yaffs2/yaffs_vfs.c:286:34:error: ' struct file ' has no
Member named ' f_dentry ' obj = yaffs_dentry_to_obj (f->f_dentry); ^ fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_hold_space ': fs/yaffs2/yaffs_vfs.c:484:34:error: ' struct file ' has no member
Named ' f_dentry ' obj = yaffs_dentry_to_obj (f->f_dentry); ^ fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_release_space ': fs/yaffs2/yaffs_vfs.c:502:34:error: ' struct file ' has no mem
ber named ' f_dentry ' obj = yaffs_dentry_to_obj (f->f_dentry); ^ fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_file_write ': fs/yaffs2/yaffs_vfs.c:594:34:error: ' struct file ' has no member
Named ' f_dentry ' obj = yaffs_dentry_to_obj (f->f_dentry); ^ fs/yaffs2/yaffs_vfs.c:606:11:error: ' struct file ' has no member named ' f_dentry ' inode = F->f_dentry->d_inode; ^ fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_file_flush ': fs/yaffs2/yaffs_vfs.c:730:55:error: ' struct file ' has no member
Named ' f_dentry ' struct yaffs_obj *obj = yaffs_dentry_to_obj (file->f_dentry); ^ Fs/yaffs2/yaffs_vfs.c:at top level:fs/yaffs2/yaffs_vfs.c:780:10:error: "New_sync_read ' undeclared Here" (not in a Func tion). Read = New_sync_read, ^ fs/yaffs2/yaffs_vfs.c:781:11:error: ' New_sync_write ' undeclared here function). Write = new_sync_write, ^ fs/yaffs2/yaffs_vfs.c:in function ' Yaffs_follow_link ': fs/yaffs2/yaffs _vfs.c:1078:2: error:implicit declaration of function ' Nd_set_link ' [-werror=implicit-function-declaration] nd_set_
Link (nd, alias); ^ Fs/yaffs2/yaffs_vfs.c:at top level:fs/yaffs2/yaffs_vfs.c:1118:17:warning:initialization from incompatible pointer t ype. Follow_link = Yaffs_follow_link, ^ fs/yaffs2/yaffs_vfs.c:1118:17:warning: (Near initialization fo R ' Yaffs_symlink_inode_opErations.follow_link ') fs/yaffs2/yaffs_vfs.c:1120:14:warning:initialization from incompatible pointer type. put_link = Yaffs_put_link, ^ fs/yaffs2/yaffs_vfs.c:1120:14:warning: (Near initialization for ' Yaffs_symlink_inode_op Erations.put_link ') fs/yaffs2/yaffs_vfs.c:in function ' yaffs_iterate ': fs/yaffs2/yaffs_vfs.c:1730:34:error: ' struct
File ' has no member named ' f_dentry ' obj = yaffs_dentry_to_obj (f->f_dentry);
^ Cc1:some warnings being treated as errors make[4]: * * * [FS/YAFFS2/YAFFS_VFS.O] Error 1 Make[3]: * * * [FS/YAFFS2] Error 2 MAKE[2]: * * * [FS] Error 2 make[2]: * * * waiting for unfinished jobs ... make[1]: * * * [/home/anzyelay/downloads/buildroot-2 016.05/output/build/linux-4.4.16/.stamp_built] Error 2 Make: * * * [_all] Error 2**
There are three questions to resolve 1:error: ' struct file ' has no member named ' F_dentry ' 2:error: ' New_sync_read/write ' undeclared here 3:error : implicit declaration of function ' Nd_set_link ' 1 ' struct file ' has no member named ' F_dentry '
The first is because the file structure of the new kernel has changed, putting the Dentry member in the path structure, as long as it changes.
struct File {
union {
struct llist_node fu_llist;
struct Rcu_head fu_rcuhead;
} F_u;
struct path f_path;
struct path {
struct vfsmount *mnt;
struct Dentry *dentry;
Add the following definitions directly to the yaffs_vfs.c , or replace them all
#define F_dentry f_path.dentry
#define F_VFSMNT f_path.mnt
2 ' new_sync_read/write ' undeclared here
For the 2nd problem is that the new kernel does not have the "new_sync_read/write" of these two exported functions, changed to
. Read = __vfs_read,//new_sync_read
. Write = __vfs_write, //new_sync_write
3 error:implicit declaration of function ' Nd_set_link '
To the Linux website query found that the 4.4.16 kernel has not nd_set_link this function,
So you want to modify the place where you use this function. The main thing is to yaffs_follow_link this function, Yaffs_follow_link's definition mainly refers to your include/linux/fs.h struct inode_ Operations.follow_link to define.
The previous alias was saved in the Nd->saved_names, and now this member has been deleted, returned directly through the function return value, and is saved in the *cookie
@@ -1053,7 +1062,11 @@} #if (Yaffs_new_follow_link = 1) + #if Linux_version_code < Kernel_ VERSION (4, 4) static void *yaffs_follow_link (struct dentry *dentry, struct nameidata *nd) + #else +static const char *
Yaffs_follow_link (struct dentry *dentry,void **cookie) + #endif {void *ret;
#else @@ -1075,7 +1088,11 @@ -1075,7 out;
#if (Yaffs_new_follow_link = 1) + #if Linux_version_code < Kernel_version (4, 4,) Nd_set_link (ND, alias);
+ #else + *cookie = alias;
+ #endif ret = alias; Out:if (ret_int) @@ -1107,10 +1124,17 @@ -1107,10 #if (yaffs_new_follow_link = 1) + #if Linux_version_code < KERN
El_version (4, 4,) void Yaffs_put_link (struct dentry *dentry, struct nameidata *nd, void *alias) {kfree (alias); + #else +void yaffs_put_link (struct inode *inode,void *alias) +{+ kfree (alias); +} + #endif #endif static const STRU CT inode_operations yaffs_symlink_inode_operations = {
Second step
The following error occurs at compile time when the above modifications are completed:
In file included from fs/yaffs2/yaffs_nameval.c:28:0: fs/yaffs2/yaffs_nameval.h:21:21:warning: ' struct Yaffs_dev '
Declared inside parameter list int Nval_del (struct Yaffs_dev *dev, char *xb, int xb_size, const YCHAR * name); ^ Fs/yaffs2/yaffs_nameval.h:21:21:warning:its Scope is only this definition or declaration, which is PROBABL Y not what want fs/yaffs2/yaffs_nameval.h:24:7: Warning: ' struct Yaffs_dev ' declared inside list int
bsize, int flags);
^ fs/yaffs2/yaffs_nameval.h:27:7: Warning: ' struct Yaffs_dev ' declared inside list int parameter); ^ Fs/yaffs2/yaffs_nameval.h:29:8: Warning: ' struct Yaffs_dev ' declared inside parameter list const char *XB, int x
B_size, char *buf, int bsize); ^ fs/yaffs2/yaffs_nameval.h:30:27:warning: ' struct Yaffs_dev ' declared inside parameter list int nval_hasvalues (struct y
Affs_dev *dev, const char *XB, int xb_size); ^ Fs/yaffs2/yaffs_naMeval.c:82:5: error:conflicting types for ' nval_del ' int nval_del (struct Yaffs_dev *dev, char *xb, int xb_size, const YC HAR *name) ^ in file included from fs/yaffs2/yaffs_nameval.c:28:0: fs/yaffs2/yaffs_nameval.h:21:5: note:previous Dec
Laration of ' Nval_del ' is here int nval_del (struct Yaffs_dev *dev, char *xb, int xb_size, const YCHAR * name); ^ Fs/yaffs2/yaffs_nameval.c:100:5: error:conflicting types for ' nval_set ' int nval_set (struct Yaffs_dev *dev, ^ in File included from fs/yaffs2/yaffs_nameval.c:28:0: fs/yaffs2/yaffs_nameval.h:22:5: note:previous declaration of ' Nval_ Set ' is here int nval_set (struct Yaffs_dev *dev, ^ fs/yaffs2/yaffs_nameval.c:145:5: error:conflicting types for ' n Val_get ' int nval_get (struct Yaffs_dev *dev, ^ in file included from fs/yaffs2/yaffs_nameval.c:28:0: Fs/yaffs2/yaffs _nameval.h:25:5: note:previous declaration of ' Nval_get ' is here int nval_get (struct Yaffs_dev-*dev, ^ fs/yaffs2/y Affs_nameval.c:185:5: Error:conflicting types for ' nval_list ' int nval_list (struct Yaffs_dev *dev, const char *XB, int xb_size, char *buf, int bsize) ^ in file included from fs/yaffs2/yaffs_nameval.c:28:0: fs/yaffs2/yaffs_nameval.h:28:5: note:previous Declaration of ' Nval_list ' is here int nval_list (struct Yaffs_dev *dev, ^ fs/yaffs2/yaffs_nameval.c:227:5: error:conflicting Type s for ' nval_hasvalues ' int nval_hasvalues (struct Yaffs_dev *dev, const char *XB, int xb_size) ^ in file included fro M fs/yaffs2/yaffs_nameval.c:28:0: Fs/yaffs2/yaffs_nameval.h:30:5: note:previous declaration of ' Nval_hasvalues ' was
here int nval_hasvalues (struct Yaffs_dev *dev, const char *XB, int xb_size); ^ Make[4]: * * * * [FS/YAFFS2/YAFFS_NAMEVAL.O] Error 1 Make[3]: * * * [FS/YAFFS2] Error 2 make[2]: * * * [FS] Error 2 make[2]: * * * Waiting for unfinished jobs ... make[1]: * * * * * [/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/. Stamp_built] Error 2 Make: * * * [_all] Error 2
Explanation: error:conflicting types for ' Nval_del ', see the Nval_del several functions, here I do not see any type of conflict error, the Internet search was mainly the first warning there caused.
In yaffs_nameval.h, the definition of a struct struct yaffs_dev appears in the argument list, which is not defined before, which causes the function to not recognize the structure to raise the error above, query the next struct Yaffs_dev in "yaffs_ Guts.h "is defined, so in yaffs_nameval.h file include" Yaffs_guts.h "is ok third step
You may also encounter the following two errors after two modifications: error:unknown type name ' y_loff_t '
In file included from fs/yaffs2/yaffs_guts.c:18:0:
fs/yaffs2/yaffs_endian.h:32:86:error:unknown type name ' Y_loff _t '
static inline y_loff_t swap_loff_t (y_loff_t lval)
^
Fs/yaffs2/yaffs_endian.h:32:107:error:unknown Type name ' y_loff_t '
static inline y_loff_t swap_loff_t (y_loff_t lval)
^
Make[4]: * * * [Fs/yaffs2/yaffs_ GUTS.O] Error 1
make[3]: * * * [FS/YAFFS2] Error 2
make[2]: * * * [FS] Error 2
make[2]: * * Waiting for unfinished Jobs ...
.. MAKE[1]: * * * [/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/.stamp_built] Error 2 make
: * * * [_all] Error 2
This is a good solution, adding the following definition to the Yaffs_endian.h:
#ifndef y_loff_t
#define y_loff_t loff_t
#endif
yaffs_guts.c:line:undefined reference to function
fs/built-in.o:in function ' yaffs_check_obj_details_loaded ':/home/anzyelay/downloads/buildroot-2016.05/output/ build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:3254:undefined reference to ' Yaffs_do_endian_oh ' fs/built-in.o:in function ' Yaffs_oh_size_load ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/ yaffs_guts.c:5165:undefined reference to ' yaffs_do_endian_u32 '/home/anzyelay/downloads/buildroot-2016.05/output/ build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:5166:undefined reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' Yaffs_update_oh ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs _guts.c:3401:undefined reference to ' Yaffs_do_endian_oh ' fs/built-in.o:in function ' yaffs_guts_initialise ':/home/ anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:4912:undefined Reference To ' yaffs_endian_config ' fs/built-in.o:in function ' yaffs_oh_size_load ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:5165:undefined reference to ' yaffs_do_endian_u32 '/ home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:5166:undefined Reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' yaffs_oh_to_size ':/home/anzyelay/downloads/ buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:5181:undefined reference to ' Yaffs_do_endian_ U32 '/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_guts.c:5182:undefined Reference to ' yaffs_do_endian_u32 '/HOME/ANZYELAY/DOWNLOADS/BUILDROOT-2016.05/OUTPUT/BUILD/LINUX-4.4.16/FS/YAFFS2 /yaffs_guts.c:5190:undefined reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' Yaffs_pack_tags2_tags_ Only ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_packedtags2.c:111: Undefined reference to ' YAFFS_DO_ENDIAN_PACKED_TAGS2 '/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_packedtags2.c:111:undefined reference to ' YAFFS_DO_ENDIAN_PACKED_TAGS2 ' fs/ built-in.o:in function ' yaffs_unpack_tags2_tags_only ':/home/anzyelay/downloads/buildroot-2016.05/output/build/ linux-4.4.16/fs/yaffs2/yaffs_packedtags2.c:137:undefined reference to ' YAFFS_DO_ENDIAN_PACKED_TAGS2 ' FS/BUILT-IN.O : in function ' Yaffs_load_tags_to_spare ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/ yaffs2/yaffs_tagscompat.c:92:undefined reference to ' yaffs_do_endian_u32 '/home/anzyelay/downloads/ buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_tagscompat.c:93:undefined reference to ' Yaffs_do_ Endian_u32 ' fs/built-in.o:in function ' yaffs_get_tags_from_spare ':/home/anzyelay/downloads/buildroot-2016.05/ output/build/linux-4.4.16/fs/yaffs2/yaffs_tagscompat.c:122:undefined reference to ' yaffs_do_endian_u32 '/home/ anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_tagscompat.c:123:undefined Reference to ' Yaffs_do_endian_u32 ' fs/built-in.o:in function ' nval_used ':/home/anzyelay/downloads/buildroot-2016.05/output/ build/linux-4.4.16/fs/yaffs2/yaffs_nameval.c:69:undefined reference to ' Yaffs_do_endian_s32 '/home/anzyelay/ downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_nameval.c:75:undefined reference to ' Yaffs_ Do_endian_s32 ' fs/built-in.o:in function ' nval_find ':/home/anzyelay/downloads/buildroot-2016.05/output/build/ linux-4.4.16/fs/yaffs2/yaffs_nameval.c:41:undefined reference to ' Yaffs_do_endian_s32 '/home/anzyelay/downloads/ buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_nameval.c:53:undefined reference to ' Yaffs_do_endian_ S32 ' fs/built-in.o:in function ' Nval_del ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs /yaffs2/yaffs_nameval.c:93:undefined reference to ' Yaffs_do_endian_s32 ' fs/built-in.o:/home/anzyelay/downloads/ Buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_nameval.c:136:more undefined referenceS to ' yaffs_do_endian_s32 ' follow fs/built-in.o:in function ' Yaffs2_checkpt_tnode_worker ':/home/anzyelay/downloads/ buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_yaffs2.c:599:undefined reference to ' Yaffs_do_endian_ U32 ' fs/built-in.o:in function ' yaffs2_wr_checkpt_sum ':/home/anzyelay/downloads/buildroot-2016.05/output/build/ linux-4.4.16/fs/yaffs2/yaffs_yaffs2.c:811:undefined reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' Yaffs2_rd_checkpt_tnodes ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs _yaffs2.c:647:undefined reference to ' yaffs_do_endian_u32 '/home/anzyelay/downloads/buildroot-2016.05/output/build /linux-4.4.16/fs/yaffs2/yaffs_yaffs2.c:671:undefined reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' Yaffs2_rd_checkpt_sum ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_ yaffs2.c:835:undefined reference to ' yaffs_do_endian_u32 ' fs/built-in.o:in function ' YAffs2_scan_chunk ':/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/fs/yaffs2/yaffs_ yaffs2.c:1302:undefined reference to ' Yaffs_do_endian_oh '/home/anzyelay/downloads/buildroot-2016.05/output/build/
linux-4.4.16/fs/yaffs2/yaffs_yaffs2.c:1302:undefined reference to ' Yaffs_do_endian_oh ' make[2]: * * * [vmlinux] Error 1 MAKE[1]: * * * [/home/anzyelay/downloads/buildroot-2016.05/output/build/linux-4.4.16/.stamp_built] Error 2 Make: * * * All] Error 2 anzyelay@ubuntu:buildroot-2016.05$
This looked at clearly these functions have a definition of how the implementation is not recognized?? Header file These are also wrapped in letters, on the Internet to find that the compiler did not compile to the 譔 file can cause other function references unrecognized, I looked at the compilation, the other. c files are compiled into. O, and then open makefile a look did not add in, yaffs really don't worry, Add the following in the Makefile.kernel:
Yaffs-y + + YAFFS_ENDIAN.O
There is no such thing as a wicked mistake. After the compilation is OK, as for the start of any other cause of the error is unknown.
Yaffs's patch file is as follows:
Diff-nur Yaffs2/makefile.kernel Yaffs2.anzyelay/makefile.kern