分类: 嵌入式
2012-06-26 17:31:07
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问题。