yaffs文件系统是专门为nand flash定义的一种文件系统格式,比jffs更适用于nand flash,yaffs文件系统源码并没有合并到内核里面去,
1、yaffs文件系统
(1)源码在http://www.yaffs.net/下载
进里面我们可以看到在GIT中我们可以获得yaffs
用git命令来获得,格式如下
(2)如果系统没有装git工具,需要先安装git
安装后下载yaffs源码,
下载后得到一个yaffs2目录,里面包含有官方提供的所有源码
怎么使用看readme文件
查看里面的例子
(2)打补丁
进入yaffs目录,打补丁
(3)配置内核
上面的命令把下载到的yaffs源码拷贝到内核里面
然后进行配置,搜索yaffs,选上yaffs2 file system support
(4)编译时出现错误
结构体没有某个成员
没有d_alloc_root函数,在新的yaffs里面用到这个函数,但是我们内核根本没有实现这个函数,应该用成什么函数,
看看root在其他文件中怎么用,s_root是dentry结构体
搜索s_root,看看在别的文件系统里面怎么用,用的是d_make_root函数,而不是我们的d_alloc_root函数,因而把
因而修改函数
(5)编译和拷贝
(6)制作yaffs文件映像
2、实验
(1)下载yaffs文件系统
(2)擦除、烧写
(3)设置参数、下载内核
(4)用bootm 32000000启动内核
出现问题,挂载了上去。
用替代法查找问题
、
下载u-boot
擦除、烧写
用reset命令重启、然后重新下载yaffs
1.1.6版的u-boot擦除命令没有之前的.part后缀,烧写命令引用长度要加上括号
设置环境变量,下载新内核,然后启动
(5)用旧的u-boot启动没有问题,所以新的u-boot存在问题
查看cmd_nand.c
如果我们加了.yaffs的话,就调用函数nand_write_skip_bad.会传入一个参数flag(WITH_YAFFS_OOB)
函数nand_write_skip_bad里面
check_skip_len函数判断里面有没有坏块,有坏块就忽略并跳过。
如果flash没有坏块,且标志项不为WITH_DROP_FFS的话,也没有yaffs标志,走下面分支。
所以要添加flag&WITH_YAFFS_OOB这一项(在Nand_util.c)
但是我们走的分支是下面,如果上面还需加上一项
(6)重新下载烧写u-boot
(7)下载yaffs映像文件,擦除分区
(8)下载内核、烧写启动内核成功