arm_linux_yaffs2文件系统移植到内核GUN编译错误问题处理
linuxarm内核编译流程

linuxarm内核编译流程Linux ARM内核编译流程是将Linux操作系统内核的源代码编译成二进制可执行代码的过程。
下面是一个详细的流程说明:3. 配置编译选项:在进行内核编译之前,需要对内核进行一些配置。
可以使用make menuconfig, make xconfig或make config等命令来配置内核选项。
这些配置选项包括了硬件平台、设备驱动、文件系统支持、网络协议等。
4. 生成.config文件:在完成配置后,会生成一个.config文件,该文件描述了内核的配置选项。
可以使用make oldconfig,make silentoldconfig或make defconfig等命令生成.config文件。
5. 编译内核:使用make命令开始编译内核。
可以指定编译的目标类型(如Image、vmlinux、zImage等),也可以同时编译内核模块。
6. 生成二进制镜像文件:根据编译的目标类型,可以得到对应的二进制镜像文件。
如:使用make zImage编译生成一个压缩的内核镜像文件(zImage),使用make uImage可以将zImage转换为u-boot可启动的格式。
7. 安装内核:将生成的二进制镜像文件安装到目标设备中。
可以使用工具如Fastboot或者将镜像文件拷贝到设备的存储介质上。
8. 启动内核:重启目标设备,通过引导引导加载器(如U-Boot)加载并启动刚刚安装的内核。
9.测试和调试:启动后,可以使用命令行工具或者调试器等工具对内核进行测试和调试。
可以通过串口或网络连接来获取内核的控制台输出。
10. 更新和维护:根据需求和情况,可以更新和维护内核。
可以从Linux官方网站获取新版本的内核源代码,并重复上述流程进行更新和编译。
总结:Linux ARM内核编译流程包括获取内核源代码、配置编译工具链、配置编译选项、生成.config文件、编译内核、生成二进制镜像文件、安装内核、启动内核、测试和调试、更新和维护等步骤。
Yaffs2 文件系统移植

Yaffs2 文件系统移植/blog/static/1247505732009916437175/一.准备工作1、yaffs2源代码获取进入/cgi-bin/viewcvs.cgi/,点击“Download GNU tarball”,下载后出现cvs-ro ot.tar.gz压缩包。
2、busybox-1.13.3从/downloads/下载busybox,这里下载的是busy busybox-1.13.3.tar.gz。
3、根文件系统制作工具从/ 网站下载根文件系统制作工具mkyaffs2image.tgz。
4、友善之臂的根文件系统在制作根文件系统时,需要用到链接库,为保证链接库能用直接用友善之臂的根文件系统root_qtopia 中的链接库lib,到友善之臂网站/ 下载root_qtopia.tgz。
5、给内核打yaffs2文件系统的补丁cd /opt/stdudyarm/sourcetar –zxvf cvs-root.tar.gz –C /opt/studyarmcd /opt/stdudyarm/cvs/yaffs2/./patch-ker.sh c /opt/studyarm/linux-2.6.29.1/上面命令完成下面三件事情:(1) 修改内核fs/Kconfig增加一行:source "fs/yaffs2/Kconfig"(2) 修改内核fs/Kconfig增加一行:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/(3) 在内核fs/目录下创建yaffs2目录将yaffs2源码目录下面的Makefile.kernel文件复制为内核fs/yaffs2/Makefie;将yaffs2 源码目录的Kconfig文件复制到内核fs/yaffs2目录下;将yaffs2源码目录下的*.c *.h文件复制到内核fs/yaffs2目录下.6 配置Linux内核选择支持yaffs2文件系统Filesystem--->Miscellaneous filesystems---><*>YAFFS2 file system support[*] Lets Yaffs do its own ECCNative language support<*> Codepage 437 (United States,Canada)<*>Simplified Chinese charset(GB2312)<*>Traditional Chinese charset(Big5)<*>NLS ISO 8859-1(Latin1:Western European Languages)<*>NLS UTF-8编译内核make zImage二.制作根文件系统2.1嵌入式Linux中都需要构建根文件系统,构建根文件系统的规则在FHS(Filesystem Hierarchy Standard)文档中,下面是根文件系统顶层目录。
YAFFS2启动坏块问题

启动的时候出现一大串:block 2 is badblock 3 is badblock 4 is badblock 5 is badblock 6 is badblock 7 is badblock 8 is badblock 9 is bad...VFS: Mounted root (yaffs filesystem).Freeing init memory: 120KWarning: unable to open an initial console.Failed to execute /linuxrc. Attempting defaults...Kernel panic - not syncing: No init found. Try passing init= option to kernel.或者block 2 is bad没有出现,直接显示VFS: Mounted root (yaffs filesystem).Freeing init memory: 120KWarning: unable to open an initial console.Failed to execute /linuxrc. Attempting defaults...Kernel panic - not syncing: No init found. Try passing init= option to kernel.其实都是MTD没有正确地读取到root, 可以在u-boot 中执行nand bad, 查看bad block 的信息, 如果从0x200000 - 0x1200000 之间有很多bad block说明nand write.yaffs 这个命令还有问题, OOB 的信息没有正确地写入在NANDFLASH, 只写入了data, 而OOB 没有写进去.下面说说如果解决这个问题:在NANDFLASH 的写入过程中, 其中会调用nand_do_write_ops, 在这个函数中,if (unlikely(oob))oob = nand_fill_oob(chip, oob, ops);这两行要注意, 在这两行之前OOB buf一直都是正解的,但这两行之后, OOB 的数据就变成了0xFF了,在靠前的一些block OOB 都是0xFF,但是到了后面OOB的数据就变得杂乱无章了,所以就会出现一大串的bad flash,为什么会变成没有规律,原因还没有找到,将这两行MASK,改为memcpy(chip->oob_poi, oob, ops->ooblen);问题就解决了,或者在nand_write_opts 函数中将oob_ops.mode = MTD_OOB_AUTO;改为oob_ops.mode = MTD_OOB_RAW;问题同样可以解决.。
Linux系统编译安装常见错误处理方法

5.Configure: error: libjpeg.(a|so) not found
# yum install libjpeg libjpeg-devel
6.Configure: error: libpng.(also) not found.
# yum install libpng libpng-devel
13.Configure: error: Cannot find ldap.h
# yum install openldap-devel
本篇文章来源于 Linux公社网站() 原文链接:/Linux/2011-04/34622.htm
再php:~/:./configure …… --with-gd=/usr/local/gd2 ……
1) Configure: error: xml2-config not found. Please check your libxml2 installation.
Solutions :
Solutions :
Quote: # yum install unixODBC-devel
12) Configure: error: Cannot find pspell
Solutions :
Quote: # yum install pspell-devel
13) configure: error: mcrypt.h not found. Please reinstall libmcrypt.
7) Configure: error: freetype.h not found.
Solutions :
Quote: #yum install freetype-devel
移植yaffs到linux

移植yaffs到linux移植yaffs到linux9月3日今天开始移植yaffs到linux2.61)首先选择的突破口是为u-boot增加nand write.yaffs命令,按照《嵌入式Linux应用开发完全手册(韦东山)》上的教程完成对u-boot的修改,编译后,write.yaffs指令报错,无奈,放弃。
2)给2.6.26内核添加yaffs2驱动,发现没有编译进内核,用里面的Makefile.kernel替换Makefile,编译内核时发生错误。
网上指出新版的内核与yaffs2文件有冲突,有patch,未找到,暂缓,放弃。
3)转换到2.6.14.1内核,编译yaffs驱动,顺利通过。
因为前天移植了u-boot-1.3.1,放弃了u-boot旧式的nand_legacy,采用linux mtd 的标准ecc算法,因此现在 2.6.14.1内核也可以打开NAND_ECC_SOFT。
启动信息:yaffs Sep 3 2008 19:54:24 Installing.yaffs: dev is 32505858 name is "mtdblock2"yaffs: Attempting MTD mount on 31.2, "mtdblock2"VFS: Mounted root (yaffs filesystem) readonly.mount_devfs_fs(): unable to mount devfs, err: -2Freeing init memory: 112KWarning: unable to open an initial console.Failed to execute /linuxrc. Attempting defaults...Kernel panic - not syncing: No init found. Try passing init= option to kernel.当然有错误,因为还没有烧入yaffs文件系统。
浅谈更新linux-3.2.5(7) 让内核支持yaffs2

浅谈更新linux-3.2.5(7)让内核支持yaffs2
一开始我用的是一个较旧的版本的yaffs2.tar.gz,结果显示如下
然后我就去上去找最新的驱动。
当然,我还没找到,我一个朋友就给我发来一份他用的yaffs2的驱动。
然后接下来我来讲讲过程
首先建立一个文件夹mkdir /file/fl
然后把linux-3.2.5的景象放到/file/fl下解压 tar xvf linux-3.2.5.tar.bz2
然后把yaffs2_20111027官方git.tar.bz2放到/file/fl下解压,然后进入cd /file/fl/yaffs2
然后ls
看到如图
接下来运行口令./patch-ker.sh c /file/fl/linux-3.2.5
给内核打上yaffs2的补丁。
但是这里遇到了问题,如图
什么意思?
您需要选择使用m 或者s。
在命令中加入m就可以了。
然后输入口令./patch-ker.sh c m /file/fl/linux-3.2.5然后如图所示,成功了
OK 。
显示如下就算是成功了
Updating /file/fl/linux-3.2.5/fs/Kconfig Updating /file/fl/linux-3.2.5/fs/Makefile。
LINUX-2.6内核移植过程中常见问题及解决方法

LINUX-2.6内核移植过程中常见问题及解决方法1、内核启动后,出现如下提示后停住UNCOMPRESSING LINUX........................................................... DONE, BOOTING THE KERNEL一般情况下,这个时候内核已经启动了,只不过在控制台CONSOLE中没有打印信息而已。
所以问题主要锁定在串口这一块。
首先确定你的板子包括硬件都是没有问题的。
可以分以下几种情况,最常见的原因是在内核启动命令行这块CMDLINE,一般情况下LINUX-2.4内核中,CONSOLE=TTYS0,而LINUX-2.6内核则用CONSOLE=TTYSAC0。
还有一个原因,不多见,我当时用的是S3C2410的板子,BOOTLOADER用的是U-BOOT-1.0.0,内核移植的是LINUX-2.6.16,结果出现这个问题,在网上查了很多资料,最后找出来问题。
U-BOOT把S3C2410的时钟设置为202MHZ,而内核启动时使用的是200MHZ,修改U-BOOT中的MPLLCON:CLK_POWER->MPLLCON MPLLCON = 0X0005C040;//MPLL=200MHZ2、内核编译成功后,启动后出现如下提示后就停住了。
FREEING INIT MEMORY: 72KWARNING: UNABLE TO OPEN AN INITIAL CONSOLE.这个也是控制台CONSOLE的问题,LINUX-2.6.13以后的内核都支持DEVFS,而之后版本的内核就把DEVFS这块去掉了,虽然还能在内核源码中找到对应的源码,你也可以把它加进内核,但是也不是太好用。
2.6.13 后的版本改为支持UDEV了,UDEV这块我也没太弄懂,正在研究。
因此如果你是LINUX-2.6.13版本一下的内核,编译的时候在PSEUDO FILESYSTEMS添加DEV FILESYSTEM SURPPORT选项,也就是添加DEVFS的支持,如果LINUX-2.6.13之后的版本,你就看看你的ROOTFS下有没有/DEV/CONSOLE这个文件,没有的话,自己做一个就可以#MKNOD CONSOLE C 5 13、内核启动后,打印出一大堆提示信息UNABLE TO HANDLE KERNEL XXXX POINTER DEREFERENCE AT VIRTUAL ADDRESS XXXXXX ……R10: 00000000 R9 : 00000000 R8 : 00500001R7 : 00000001 R6 : C011AB50 R5 : C3726C00 R4 : C013E024R3 : 00000000 R2 : 00000000 R1 : 00000000 R0 : C3726C00….<0>KERNEL PANIC - NOT SYNCING: ATTEMPTED TO KILL INIT!这个提示是内核启动加载驱动时出错,那就只有找到出错的驱动,不加载它,如果必须要用这个驱动,只有自己修改源代码,一般问题都在对硬件的地址操作有问题。
嵌入式linux内核编译错误的一些解决办法

make[2]:***[drivers/video/console2] error 2
make[1]:***[drivers/video1] error 2
make:***[drivers] error 2
解决方法:
在make menuconfig 时选哪个设备驱动的选项进去在选Graphics support ->
scripts/basic/docproc.c: 在函数‘parse_file’中:
scripts/basic/docproc.c:296: 警告: 对指针赋值时目标与指针符号不一致
SHIPPED scripts/kconfig/zconf.tab.h
HOSTCC scripts/kconfig/conf.o
四:
make zImage和make xipImage
Kernel configured for XIP (CONFIG_XIP_KERNEL=y)
Only the xipImage target is available in this case
make[1]: *** [arch/arm/boot/zImage] Error 1
make: *** [.tmp_vmlinux1] 错误 1
ld链接时产生错误
对应行:
/home/kevin/ARMSystem/linux-2.6.12/arch/arm/kernel/vmlinux.lds
/* those must never be empty */
ASSERT((__proc_info_end - __proc_info_begin), "missing CPU support")
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
yaffs2更新的比较慢,跟不上内核的更新速度.所以只能自己做些修改first step刚开始从官网下载下来的直接打补丁后会出现一系列的错误.如下:**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 member 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 function).read = new_sync_read,^fs/yaffs2/yaffs_vfs.c:781:11: error: 'new_sync_write' undeclared here (not in a 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 type.follow_link = yaffs_follow_link,^fs/yaffs2/yaffs_vfs.c:1118:17: warning: (near initialization for'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_operations.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 errorsmake[4]: *** [fs/yaffs2/yaffs_vfs.o] Error 1make[3]: *** [fs/yaffs2] Error 2make[2]: *** [fs] Error 2make[2]: *** Waiting for unfinished jobs....make[1]: ***[/home/anzyelay/Downloads/buildroot-2016.05/output/build/linux-4.4.16 /.stamp_built] Error 2make: *** [_all] Error 2**上面有三个问题要解决∙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’第一个是由于新内核的file结构体发生了变化,把dentry这个成员放到了path 结构体里,这里只要更改下就行.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;};直接在yaffs_vfs.c里加上下列定义就行,或者全部替换#define f_dentry f_path.dentry#define f_vfsmnt f_path.mnt2 ‘new_sync_read/write’ undeclared here对于第2个问题是由于新内核没有”new_sync_read/write”这两个导出函数了,改成.read = __vfs_read,//new_sync_read.write = __vfs_write, //new_sync_write3 error: implicit declaration of function‘nd_set_link’到linux官网查询发现4.4.16内核里已经不用nd_set_link这个函数了,因此要修改用到这个函数的地方.主要就是yaffs_follow_link这个函数啦,yaffs_follow_link的定义主要参考你的include/Linux/fs.h里的struct inode_operations.follow_link来定义.以前的alias是保存在 nd->saved_names里,现在这个成员已经被删除了,直接通过函数返回值返回,并且保存在*cookie中@@ -1053,7 +1062,11 @@}#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)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 @@goto out;}#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)nd_set_link(nd, alias);+#else+ *cookie = alias;+#endifret = alias;out:if (ret_int)@@ -1107,10 +1124,17 @@#endif#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)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#endifstatic const struct inode_operations yaffs_symlink_inode_operations = {second step以上修改完后在编译时还会出现下列的错误: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 listint 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 probably not what you wantfs/yaffs2/yaffs_nameval.h:24:7: warning: 'struct yaffs_dev' declared inside parameter listint bsize, int flags);^fs/yaffs2/yaffs_nameval.h:27:7: warning: 'struct yaffs_dev' declared inside parameter listint bsize);^fs/yaffs2/yaffs_nameval.h:29:8: warning: 'struct yaffs_dev' declared inside parameter listconst char *xb, int xb_size, char *buf, int bsize);^fs/yaffs2/yaffs_nameval.h:30:27: warning: 'struct yaffs_dev' declared inside parameter listint nval_hasvalues(struct yaffs_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 YCHAR *name)^In file included from fs/yaffs2/yaffs_nameval.c:28:0:fs/yaffs2/yaffs_nameval.h:21:5: note: previous declaration of'nval_del' was hereint 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' was hereint nval_set(struct yaffs_dev *dev,^fs/yaffs2/yaffs_nameval.c:145:5: error: conflicting types for'nval_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' was hereint nval_get(struct yaffs_dev *dev,^fs/yaffs2/yaffs_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' was hereint nval_list(struct yaffs_dev *dev,^fs/yaffs2/yaffs_nameval.c:227:5: error: conflicting types for'nval_hasvalues'int nval_hasvalues(struct yaffs_dev *dev, const char *xb, int xb_size) ^In file included from fs/yaffs2/yaffs_nameval.c:28:0:fs/yaffs2/yaffs_nameval.h:30:5: note: previous declaration of'nval_hasvalues' was hereint nval_hasvalues(struct yaffs_dev *dev, const char *xb, int xb_size); ^make[4]: *** [fs/yaffs2/yaffs_nameval.o] Error 1make[3]: *** [fs/yaffs2] Error 2make[2]: *** [fs] Error 2make[2]: *** Waiting for unfinished jobs....make[1]: ***[/home/anzyelay/Downloads/buildroot-2016.05/output/build/linux-4.4.16 /.stamp_built] Error 2make: *** [_all] Error 2解释:error: conflicting types for ‘nval_del’,查看nval_del几个函数,这里我看不出有什么类型冲突错误,网上搜了下主要是第一个WARNING那里引起的.在yaffs_nameval.h中,结构体struct yaffs_dev的定义出现在参数列表中,而在此之前没有定义,这样会导致函数不识别这个结构体引发上面的错误,查询了下struct yaffs_dev在”yaffs_guts.h”中被定义,因此在yaffs_nameval.h 文件中include下”yaffs_guts.h”就OK了third step通过上两个修改后可能还会遇到下面的两个错误: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 1make[3]: *** [fs/yaffs2] Error 2make[2]: *** [fs] Error 2make[2]: *** Waiting for unfinished jobs....make[1]: ***[/home/anzyelay/Downloads/buildroot-2016.05/output/build/linux-4.4.16 /.stamp_built] Error 2make: *** [_all] Error 2这个好解决,在yaffs_endian.h中加上如下定义:#ifndef Y_LOFF_T#define Y_LOFF_T loff_t#endifyaffs_guts.c:line: undefined reference to functionfs/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':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':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' followfs/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':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 1make[1]: ***[/home/anzyelay/Downloads/buildroot-2016.05/output/build/linux-4.4.16 /.stamp_built] Error 2make: *** [_all] Error 2anzyelay@ubuntu:buildroot-2016.05$这个看了下明明这些函数都有定义有实现怎么就是不识别呢??头文件这些也包函了,网上找了下说编译器没有编译到譔文件可有导致其它函数引用时无法识别,我看了下编译情况, 其它的.c文件都编译成.o了,然后打开Makefile一看果然没有加进来,yaffs真的不省心,在Makefile.kernel里增加如下 :yaffs-y += yaffs_endian.o这回万恶的错误都没了吧.编译后是OK的了,至于启动后有没有其它原因导致的错误就不得而知了.yaffs的补丁文件如下:diff -Nur yaffs2/Makefile.kernel yaffs2.anzyelay/Makefile.kernel--- yaffs2/Makefile.kernel 2016-07-29 14:01:01.778572877 +0800+++ yaffs2.anzyelay/Makefile.kernel 2016-08-03 10:29:07.361276458 +0800 @@ -15,4 +15,5 @@yaffs-y += yaffs_bitmap.oyaffs-y += yaffs_summary.oyaffs-y += yaffs_verify.o+yaffs-y += yaffs_endian.odiff -Nur yaffs2/yaffs_endian.h yaffs2.anzyelay/yaffs_endian.h--- yaffs2/yaffs_endian.h 2016-07-29 14:01:01.814572879 +0800+++ yaffs2.anzyelay/yaffs_endian.h 2016-08-03 11:18:12.633411085+0800@@ -29,6 +29,9 @@#define swap_s32(val) \(s32)(swap_u32((u32)(val)))+#ifndef Y_LOFF_T+#define Y_LOFF_T loff_t +#endifstatic inline Y_LOFF_T swap_loff_t(Y_LOFF_T lval){u32 vall = swap_u32((u32) (lval & 0xffffffff));diff -Nur yaffs2/yaffs_nameval.h yaffs2.anzyelay/yaffs_nameval.h--- yaffs2/yaffs_nameval.h 2016-07-29 14:01:01.818572879 +0800+++ yaffs2.anzyelay/yaffs_nameval.h 2016-08-03 11:22:07.409421602 +0800@@ -17,6 +17,7 @@#define __NAMEVAL_H__#include "yportenv.h"+#include "yaffs_guts.h"int nval_del(struct yaffs_dev *dev, char *xb, int xb_size, const YCHAR* name);int nval_set(struct yaffs_dev *dev,diff -Nur yaffs2/yaffs_vfs_multi.c yaffs2.anzyelay/yaffs_vfs_multi.c--- yaffs2/yaffs_vfs_multi.c 2016-07-29 14:01:01.818572879 +0800+++ yaffs2.anzyelay/yaffs_vfs_multi.c 2016-08-03 11:06:42.877379435+0800@@ -76,6 +76,10 @@#include <linux/slab.h>#include <linux/init.h>#include <linux/fs.h>+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 16))+#define f_dentry f_path.dentry+#define f_vfsmnt f_path.mnt+#endif#include <linux/proc_fs.h>#if (LINUX_VERSION_CODE < KERNEL_VERSION(2, 6, 39))#include <linux/smp_lock.h>@@ -777,8 +781,13 @@#if (LINUX_VERSION_CODE > KERNEL_VERSION(2, 6, 22))static const struct file_operations yaffs_file_operations = {#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 4, 16)//anzyelay+ .read = __vfs_read,+ .write = __vfs_write,+#else.read = new_sync_read,.write = new_sync_write,+#endif.read_iter = generic_file_read_iter,.write_iter = generic_file_write_iter,#else@@ -1053,7 +1062,11 @@}#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)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 @@goto out;}#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)nd_set_link(nd, alias);+#else+ *cookie = alias;+#endifret = alias;out:if (ret_int)@@ -1107,10 +1124,17 @@#endif#if (YAFFS_NEW_FOLLOW_LINK == 1)+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 16)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#endifstatic const struct inode_operations yaffs_symlink_inode_operations = {。