YAFFS2移植Linux2.6.39.2 成功

YAFFS2移植Linux2.6.39.2 成功(需要更改YAFFS2官方最新源代码)附上自己修改好的Linux2.6.39.2-yaffs2.tar.gz。

原以为Linux内核的YAFFS2文件系统移植很简单,网上一大片的,多的是,其实只要给Linux内核打个补丁就行了,对于Linux2.6.37及以前的内核,可能真的是很简单,就像上面说的,直接下载YAFFS2源码,然后通过执行源代码内的补丁就行了,但是对于Linux2.6.38及以后的内核,估计打完补丁也会编译不过,因为Linux2.6.38是Linux内核发展的一个分水岭,FS文件系统发生了变化,据官方说还加入了一个啥子神奇补丁,没仔细研究过,不清楚,但是文件系统的确是发生了变化,正是这种文件系统的变化,导致了YAFFS2移植遇到了问题,好了,夜已深了,也搞了几个小时了,眼睛都快打架了,野棉花扯多了,呵呵,还是步入正题吧,喜欢与人分享我的经验,呵呵,菜鸟一个,经验估计也谈不上,还是算愚见吧!

好了,本来是打算写点OK6410之Linux2.6.39.2触摸屏等驱动移植愚见的,心血来潮,放在NAND第四分区(MTDBLOCK3)的QT-YAFFS2文件系统无法启动,心里就怪痒痒的,既然老天让我们在此时相遇,那我也不再躲闪了(原本是放在后面再移植的,因为原以为打个补丁就行了),哎,说真的,遇到编译不过时,在网上找了好久,完全找不到解决办法,哎,算了,还是自己慢慢分析,解决吧。

移植方法:

第一步,我们需要YAFFS2的源码,如果大家有兴趣想了解YAFFS2文件系统的驱动原理的话可以直接去访问他们的官网,地址是,上面说的很详细的,也有源码下载地址,怕大家进去后难找,直接贴出YAFFS2的最新源码地址吧,2011年6月28号的那个版本,

免费下载地址在

用户名与密码都是

具体下载目录在 /pub/2011/06/28/YAFFS2/

这个是目前最新的YAFFS2的源码了,不过虽然是最新源码已经被打过好多次补丁,但是对于Linux2.6.39.2的内核版本,还是不给力啊,编译依然无法通过,不是说过了吗,文件系统发生了变化。

第二步,将下载下来的YAFFS2最新源码 YAFFS2.tar.gz 放入你Linux的任意一个目录下,执行 tar zxvf YAFFS2.tar.gz 然后进入YAFFS2源码包,由于最新的源码再执行脚本 patch-ker.sh 时 有四个参数,可以追加:c,l,m,s,

./patch-ker.sh  c/l m/s kernelpath

if c/l is c, then copy. If l then link

if m/s is m, then use multi version code. If s then use single version code

上面这段英文应该很好懂吧,简而言之,C 是复制文件,L是链接文件,M是多种,S是单个的,

那么在这里,我们只需执行 ./patch-ker.sh c m /your Linux2.6.39.2 kernel directory

执行完这条命令之后,你将会发现在Linux2.6.39.2/fs/下发现有了yaffs2目录了,并且里面也出现了好多文件

root@:/SHARE/linux-2.6.39.2/fs/yaffs2# ls
Kconfig               yaffs_linux.h        yaffs_summary.c
Makefile              yaffs_mtdif1.c       yaffs_summary.h
yaffs_allocator.c     yaffs_mtdif1.h       yaffs_tagscompat.c
yaffs_allocator.h     yaffs_mtdif2.c       yaffs_tagscompat.h
yaffs_attribs.c       yaffs_mtdif2.h       yaffs_trace.h
yaffs_attribs.h       yaffs_mtdif.c        yaffs_verify.c
yaffs_bitmap.c        yaffs_mtdif.h        yaffs_verify.h
yaffs_bitmap.h        yaffs_nameval.c      yaffs_vfs.c
yaffs_checkptrw.c     yaffs_nameval.h      yaffs_yaffs1.c
yaffs_checkptrw.h     yaffs_nand.c         yaffs_yaffs1.h
yaffs_ecc.c           yaffs_nand.h         yaffs_yaffs2.c
yaffs_ecc.h           yaffs_packedtags1.c  yaffs_yaffs2.h
yaffs_getblockinfo.h  yaffs_packedtags1.h  yportenv.h
yaffs_guts.c          yaffs_packedtags2.c
yaffs_guts.h          yaffs_packedtags2.h

说明这个补丁是打成功了,同时,你会发现,在fs目录下的Kconfig 和Makefile文件里也被相应的添加了加入yaffs2的支持信息,好了,到这一步,说明YAFFS2的补丁是打上了,但是由于是新版的LINUX2.6.39.2,所以导致编译无法通过,如果你不信的话,可以现在就编译试试看,会在生成YAFFS2.o时出错,而错误主要就是出现 在yaffs_vfs.c

这个文件上,

一个是

.get_sb ERROR问题,

还有就是get_sb_bdev ERROR问题。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wwjzsg.html