您的位置:首页 > 编程语言 > PHP开发

内核添加对yaffs2文件系统的支持

2016-11-14 12:38 561 查看
CSDNGitHub
内核添加对yaffs2文件系统的支持
AderXCoding/system/tools/yaffs2




本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作

1 yaffs介绍

YAFFS
,
Yet Another Flash File System
, 是一种类似于
JFFS/JFFS2
的专门为
Flash
设计的嵌入式文件系统. 与
JFFS
相比, 它减少了一些功能, 因此速度更快、占用内存更少.
YAFFS
JFFS
都提供了写均衡, 垃圾收集等底层操作. 它们的不同之处在于 :

JFFS
是一种日志文件系统, 通过日志机制保证文件系统的稳定性.
YAFFS
仅仅借鉴了日志系统的思想, 不提供日志机能, 所以稳定性不如
JAFFS
, 但是资源占用少.

JFFS
中使用多级链表管理需要回收的脏块, 并且使用系统生成伪随机变量决定要回收的块, 通过这种方法能提供较好的写均衡, 在
YAFFS
中是从头到尾对块搜索, 所以在垃圾收集上
JFFS
的速度慢, 但是能延长 NAND 的寿命.

JFFS
支持文件压缩, 适合存储容量较小的系统;
YAFFS
不支持压缩, 更适合存储容量大的系统.

YAFFS
还带有
NAND
芯片驱动, 并为嵌入式系统提供了直接访问文件系统的
API
, 用户可以不使用
Linux
中的
MTD
VFS
, 直接对文件进行操作.
NAND Flash
大多采用
MTD+YAFFS
的模式.
MTD
(
Memory Technology Devices
, 内存技术设备)是对
Flash
操作的接口, 提供了一系列的标准函数, 将硬件驱动设计和系统程序设计分开.

YAFFS2
YAFFS
的升级版, 能更好的支持
NAND FLASH
, 我们采用最新的
YAFFS2
文件系统. 我们首先下载
YAFFS
文件系统.

2 内核添加对yaffs2文件系统的支持

内核中默认是不支持
yaffs
文件系统的, 因此我们需要为内核打上
yaffs
的补丁

File  systems  --->
Miscellaneous  filesystems  --->
<*>  YAFFS2  file  system  support
[*]  Autoselect  yaffs2  format


2.1 下载yaffs源码

第一步, 我们需要
YAFFS2
的源码, 如果大家有兴趣想了解
YAFFS2
文件系统的驱动原理的话可以直接去访问他们的官网

官网地址 : www.yaffs2.net

有源码下载地址, 怕大家进去后难找, 直接贴出YAFFS2的最新源码地址吧 http://www.aleph1.co.uk/gitweb/?p=yaffs2.git;a=summary

直接点击, 点最新版本, 点击最右边的
SNAPSHOT
下载, 这个是目前最新的YAFFS2的源码了.

或者直接访问, 即可自动下载

http://aleph1.co.uk/gitweb?p=yaffs2.git;a=snapshot;h=HEAD;

下载后解压缩
yaffs
源代码

当然我们也可以使用git进行下载

普通用户使用

git clone git://www.aleph1.co.uk/yaffs2


内部开发人员

yaffs
的开发人员会有自己的开发账户, 因此可以直接访问
git
进行下载

git clone ssh://www.aleph1.co.uk/home/aleph1/git/yaffs2




2.2 为内核打上patch

第二步, 将下载下来的
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-linux-kernel-directory




执行完这条命令之后, 你将会发现在
kernel
源代码目录下发现有了
yaffs2
目录了, 并且里面也出现了好多文件

修改内核
fs/Kconfig
, 增加了
yaffs2
下的
Kconfig


# Patched by YAFFS
source "fs/yaffs2/Kconfig"




修改内核
fs/Makefile
, 增加了
yaffs
目录的信息

同时将原来的
Makefile
备份为
Makefile.pre.yaffs


# Patched by YAFFS
obj-$(CONFIG_YAFFS_FS)          += yaffs2/




在内核fs/目录下创建yaffs2子目录

将yaffs2源码目录下的Makefile.kernel复制为内核fs/yaffs2/Makefile文件

将yaffs2源码目录下的Kconfig文件复制到内核fs/yaffs2/目录下

将yaffs2源码目录下的.c,.h文件(不包括子目录下的文件)复制到内核fs/yaffs2/目录下



2.3 配置内核

最后就是配置编译内核, 让内核支持yaffs2文件系统

```cpp
File systems ---> Miscellaneous filesystems ---> <*> YAFFS2 file system support [*] Autoselect yaffs2 format

配置语言选项

Native Language support --->
(iso8859-1) Default NLS Option
<*> Codepage 437(United States, Canada)
<*> Simplified Chinese charset(CP936, GB2312)
<*> NLS ISO8859-1 (Latin 1; Western European Language)
<*> NLS UTF-8




yaffs2
需要内核
MTD
的支持

若在
make menuconfig
中没有出现
yaffs2
文件系统的支持, 请检查
MTD
的配置,
yaffs2
依赖于
MTD
.
MTD
中配置了
linux
内核对
NANDFlash
的支持.

Device Drivers --->
Memory Technology Device (MTD) support  --->

# 进一步把其中的NAND Flase的支持打开






内核支持
NandFlash
yaffs2
文件系统,将内核烧入
NandFlash
后, 再烧入
yaffs2
文件系统, 可以使用制作好的文件系统, 也可以自己制作

启动时(成功挂载文件系统)输出:

yaffs:  dev  is  32505858  name  is  "mtdblock2"
yaffs:  passed  flags  ""
yaffs:  Attempting  MTD  mount  on  31.2,  "mtdblock2"
yaffs:  auto  selecting  yaffs2
yaffs_read_super:  isCheckpointed  0
VFS:  Mounted  root  (yaffs  filesystem)  on  device  31:2.
Freeing  init  memory:  196K




本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可, 转载请注明出处, 谢谢合作.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息