嵌入式linux下的文件系统
嵌入式linux操作系统原理与应用

嵌入式Linux操作系统是一种针对嵌入式设备设计和优化的Linux操作系统。
它在嵌入式系统中发挥着关键作用,为嵌入式设备提供了丰富的功能和灵活性。
以下是嵌入式Linux操作系统的原理和应用方面的概述:嵌入式Linux操作系统原理:内核:嵌入式Linux操作系统的核心是Linux内核,它提供了操作系统的基本功能,包括处理器管理、内存管理、设备驱动程序、文件系统和网络协议栈等。
裁剪:为了适应嵌入式设备的资源限制,嵌入式Linux操作系统通常经过裁剪和优化,只选择必要的功能和驱动程序,以减小内存占用和存储空间,并提高性能和响应速度。
交叉编译:由于嵌入式设备通常具有不同的硬件架构和处理器,所以嵌入式Linux操作系统需要通过交叉编译来生成适用于目标设备的可执行文件和库。
设备驱动:嵌入式Linux操作系统需要适配各种硬件设备,因此需要编写和集成相应的设备驱动程序,以使操作系统能够正确地与硬件进行通信和交互。
嵌入式Linux操作系统应用:嵌入式设备:嵌入式Linux操作系统广泛应用于各种嵌入式设备,如智能手机、平板电脑、家用电器、工业控制系统、车载设备等。
物联网(IoT):随着物联网的快速发展,嵌入式Linux操作系统被广泛应用于连接的嵌入式设备,用于数据采集、通信、远程控制和智能化管理。
嵌入式开发板:嵌入式Linux操作系统在开发板上提供了丰富的开发环境和工具链,用于嵌入式软件开发和调试。
自定义嵌入式系统:开发者可以基于嵌入式Linux操作系统构建自定义的嵌入式系统,根据特定需求进行定制和开发,实现各种功能和应用。
嵌入式Linux操作系统的原理和应用非常广泛,它为嵌入式设备提供了灵活性、可定制性和强大的功能支持,使得开发者能够构建高度定制化和功能丰富的嵌入式系统。
嵌入式Linux系统下根文件系统的构建

2 根 文件 系统 简 介
根 文件 系统 是 嵌 入 式 Lnx文 件 系 统 的 核 心 部 iu 分 。 含 系 统 使 用 的 软 件 和 库 , 及 所 有 用 来 为 用 包 以 户 提 供 支 持 架 构 和 用 户 使 用 的应 用 软 件 , 作 为存 并 储 数据 读 写 结 果 的区 域 。为 了 安 装 软 件 时 能 够 预知 文件 、 目录 的 存 放 位 置 , 用 户 方 便 的 找 到 不 同类 让
29 . /a vr
文 件 系 统 是 操作 系 统 中用 来 管 理 用 户 文 件 的 内核 软 件 层 。 件 可 文
能 存 在 于 磁 盘 、 络 或者 是 一 些 虚 拟 的文 件 。文 件 系统 包 括 根 文 件 系 网 等。 统 和 建 立 于 内存 设备 之 上 的 文件 系 统 , 中根 文 件 系 统 是 整 个 文 件 系 其 21 ,rc .0 po 统 的 核 心 部 分 。本 文 概 述 了根 文 件 系 统 的 组 成 , 结 合 工 程 项 目实 践 并 空 目录 , 作 为 po 文 件 系 统 的 挂 接 点 。 常 rc 详 细 说 明 了 如 何 建立 一 个 Ca F rm S根 文 件 系 统 的 一 般 步 骤 。
叉 编 译 后 分 别 下 载 至 目标 板 的 S I ls P ah和 NadFah中 ,上 电启 动 F n ls 31 准 备 根 文 件 系 统 . 运 行 。开 发 过 程 中 , — ot 载 至 S I 0 04 0 0; 核 和 文 件 系 统 U bo 下 P 的 ~ x 80 内 类 似 于 批 处 理 文 件 的 sel 本 可 以 自动 完 成 用 户 想 做 的 动 作 , hl脚 烧 录 至 N n s a dHah的 O4 0 0处 。 x 00 这 里 使 用 脚 本 进 行 了基 本 路 径 和 节 点 等 目 录框 架 的 建 立 。 建 立 se hl l l
基于嵌入式Linux的无线文件传输系统的实现

中 图法 分类号 : P 6 T 38
文 献标识码 : A
文章 编号 :0 072 2 1) 617 —4 10 .04(0 1 0 —990
I p e e tto fwiee sfl r n a to y tm s do m b d e n x m lm n ai no r ls eta s c in s se ba e ne e d dLi u i
LI e n n —a Ti
( mp tr ne, An h nNoma ies y An h n 1 0 , C ia Co ue tr Ce s a r l v ri , Un t s a 1 0 7 hn ) 4
◇ 备 一 一 ,◇
■ ■
Ab t a t F et r ia f r l s l a s ci n s s m ic s e n e e a c e fs se I p e e t d a d t ewi l s s r c : h em n l e e sf e t n a t y t i d s u s d a d ag n r l h meo tm r s n e , n r e s o wi i r o e S s y S h e i a s ci mi a v l p db r e s mmu i ai nt c n l g dc mp t r e h o o y h r i a h r wa e s e in d f e r n a t ntr n l s e eo e ywi ls o lt o e id e c n c t h o o y a o u e c n l g .T et m n l a d r s e o e n t e id g b mb d e r c so , wi l s d l . T ep af r o y e e d dp o e s r r e smo u e e h l t m f mb d e i u s u l a d P P p o o o o td T ea p i ai n o e e d d L n xOS i b i , n P r t c l sp r . h p l t t i e c o p o r m e eo e ymu t tr a si cu i g CDM A r ls o r g a i d v lp db l — e d l dn s ih n wi e sc mmu i ai n s fwa eu i g P P a dTC r t c 1 T etr n l s e n c t o t r s P n P p o o o . h mi a o n e i d b g e n se . T es se i o t z d b s do ep e e t dwi ls a s ci nmo u e c o dn ec a a t r f h r — e u g d a dt t d e h y tm p i e a e n t r s n e r e s n a t d l s c r i gt t h r c e t e s mi h e r t o a oh o wi e ls ewo kt r mo et es e dt u me n a iet e f n t no r l s l a s c in e s t r p o t p e f r i s d r l c i f n o h oo t a e z h u o wi e sf et n a t . e i r o Ke r s e e d d L n x CDM A r ls e o k P P p o o o ; e e d d f es se ; wi ls o y wo d : mb d e i u ; wi e s t r ; P r t c l mb d e l y tm e nw i r e sc mmu i ai nt c o o y e nct h lg o en
嵌入式Linux中根文件系统的实现

在 Ln x系统 中 , i u 所有 的文件 和 设备 都 是 以 文件 的形 式 来管理 的 , 而根文 件 系统是 所 有文 件 和设 备 节 点 的起 始 点 , 定 系统 能否 正 常启 动 的关 键 。本 文从 一般 Ln x 是决 iu
根文件 系统出发, 详细分析了其构成, 并结合嵌入式 系统
关键词 :根文件 系统 ;嵌 入式 Ln x u y x iu ;B sb ;启动脚本 o
中图 分 类 号 :T 3 6 P 1 文 献 标 识 码 :B
I plm e a in o o tfl y tm n e b dd d n x m e nt to fr o ie s se o m e e Li u
摘
要: 在嵌入式 Lnx中, 件系统 至关 重要 , i u 根文 它是所有文 件和设备 节点的起 始点 , 是决定 系统 能否正 常启动 的
关 键。本文从一般 Lnx i 根文件系统 出发 , 细分析 了根 文件 系统 的 构成 , u 详 结合 嵌 入式 系统 的特 点 , 出如何 利用 提 B sb x工具建立根文件系统原型 , uy o 并在此 基础 上添加必要的文件 以实现一个简单 的根文 件系统 , 以及如 何编写 系统 启 动脚 本和配置脚 本来引导系统正常启 动 。最后在实际的 AR 开发平台上验证 了新生成 的根文件系统 。 M
Xin e Do gJn ig o gW i n im n
( e a gUnv ri , e ig10 8 ) B i n iest B in 0 0 3 h y j
Ab ta t n t ee b d e iu y tm ,t ero i y tm O i o un h ti i h e inn on fal i s sr c :I h m e d d L n x s se h o tfl s se i S mp r i tt a t st eb gn ig p ito l fl e s e
嵌入式Linux下NAND flash上根文件系统的构建

(c o l f mp tr c n e T c n l yA h i n esyo c nea d e h o g , an n 2 2 0 ,hn ) S h o o Co ue i c & e h o g ,n u U i ri f i c n c n l y Se o v t S e T o Hu i 3 0 1C i a a
近些 年嵌 入式 系统 的发展 非常快 。 随着 硬件 技术 的进 步 ,越 N N l s e i e D i e s一 A D F a hD v c r v r 对 NN ls A D F a h的支持 < S C e c s p rt ¥> M D vi e up o / 来越 多 的嵌入式 设备 使用 L n x 为操 作系统 ,可 以实现 功能 更 iu 作 ( > mpl o k e c f r a Fl h ( O F * Si e Bl c D vi e o N nd as B N S) 强的应用 。 i u L n x的内核在 启动过程 中会 安装 文件系 统, 不可 或 是 < S C e c o ¥ C2 1  ̄ ) > M d vi e n 3 4 0 S n K 缺的重要 组成 部分 。 本文 以三星 的 A M 4 0 R 9 1 S为例 , 2 采用 了 L n x i u 262 ..4版本说 明 了如何在 N N l s 存储 器上构 建文件 系统 。 A D fah []U e M D F o M s T r m S C 嵌 入式 Ln x 文件系统 iu 及 ( )配置文 件系 统 二 < >K r e u o o n e e s o u p r ( l o s p o t ¥ e n la t m u t r v r i n 4 s p o t a s u p r s 文件 系统
嵌入式系统第七讲 嵌入式Linux系统启动分析

嵌入式LINUX内核的版本控制 (2)
嵌入式Linux的版本号后面还会加一个后缀,如 “rmk4-mx1bsp0.3.6” ,该后缀往往表示针对某 个开发平台的补丁。几个常用的后缀:
– – –
–
rmk:表示由Russell King维护的ARM Linux; np:表示由Nicolas Pitre维护的基于StrongARM和 Xscale的ARM Linux; ac:表示由Alan Cox(Alan Cox是仅次于Linus的 Linux维护人员,主要负责网络部分和OSS等的维护 工作)维护的Linux代码; hh : 表 示 由 网 站 发 布 的 ARM Linux代码,主要是基于Xscale的,它包括工具链 、内核补丁、嵌入式图形系统等。
Bootloader空间位置
在flash中的典型空间分配情况
BootLoader 的主要功能(1/2)
初始化系统在启动阶段必需的硬件设备; 准备后续软件系统(如操作系统)运行所需 的软件环境,如复制操作系统内核代码到 RAM中等。 向内核传递启动参数; [可选]配置系统各种参数;
BootLoader 的主要功能(2/2)
BootLoader的特点
BootLoader是操作系统内核运行前的核心程 序,它具有如下特点: 代码量大; 由C语言写成,大多数时候需要嵌入式汇编 语言; 运行于SDRAM等随机存储器 由于它是启动内核前运行的最后一个程序, 它必须把控制权交给内核,因此它最后是一 条跳转到系统内核的语句。
嵌入式LINUX的内核源代码结构 (1)
COPYING
– GPL版权申明。
CREDITS
– 光荣榜。对Linux做出过重大贡献的人员信息。
分层文件系统在嵌入式Linux中的实现

统 中如何 存储 , 以不依 赖具体 的文件 系统 类 型而 可
实现 文件 的访 问 , 这要 求操 作 系统要 对 文件 系统 作
较 高级 别 的抽 象 。Ln x的 虚 拟 文件 系 统 ( S iu VF , Vi u l i y tm) 用 户 应 用 程 序 提 供 了一个 r a Fl S se 为 t e
摘
要
通过对 Ln x iu 系统 中的虚拟文件系统机制 的深入分析 , 采用 内核模 块与用户服 务程序相结合 的思想 , 设计 和
实现 了一种基于嵌入式 Ln x的分层文件系统 。在该文件系统 的支持 下 , iu 既方便 对系统软件进行 升级 , 又保 护 了重要 系统
文 件 的只 读 性 , 应 用 价 值 显 著 。 其 关键词 嵌 入 式 Ln x VF )分 层 文 件 系 统 iu ; S
总第 2 Leabharlann 5 期 计算机与数字工程
C mp tr& Diia g n eig o ue gtl En ie rn
VO . 8 No 1 13 . 1
9 7
21 0 0年第 1 期 l
分 层 文 件 系统 在 嵌 入 式 L n x中 的 实 现 iu
黄 晓波 殷克 功
徐州 2 10 ) 2 0 0 ( 州空军学院基础部 徐
2 VF S机 制
Ln x系统用 户 可 以 不 必 知 道 数 据 在 文件 系 iu
+
收稿 日期 :0 0年 6月 1 21 9日 , 回 E期 :0 0年 8月 2 修 t 21 7日
统是 如何设 计 和实现 的 。 当 VF S接 收到 用户 的系
嵌入式Linux中CramFS根文件系统的移植实现

嵌入式Linux中CramFS根文件系统的移植实现刘俊霞;盛文婷【摘要】首先研究了嵌入式Linux系统以及CramFS文件系统的移植,然后分析了嵌入式Linux系统及CramFS文件系统的特性,其次,详细说明了移植最小Linux系统的制作过程,最后,对制作出来的Linux系统镜像进行测试.最终的测试结果显示,系统移植成功且能够实现Linux系统的基本命令.【期刊名称】《数字技术与应用》【年(卷),期】2016(000)005【总页数】2页(P59-60)【关键词】Linux;CramFS;isoLinux【作者】刘俊霞;盛文婷【作者单位】新疆工程学院电气与信息工程系新疆乌鲁木齐 830023;新疆农业大学科学技术学院新疆乌鲁木齐 830091【正文语种】中文【中图分类】TP316.81随着电子产业的不断发展,基于ARM技术的系统设计和开发平台越来越多地在控制类、消费类、通信类等电子产品中广泛应用。
从软件角度上看,构建基于ARM 技术的Linux系统要涉及到引导加载程序、Linux内核、文件系统、用户应用程序几部分的设计。
由于存储空间有限,如何有效地使用有限的存储空间是嵌入式开发者必须考虑的,合适的文件系统格式是解决这一问题的关键所在。
CramFS是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩。
它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时候,马上计算出该数据在CramFS中的位置,将它实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。
CramFS文件系统的基本组成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、链接库、图形界面程序和用户应用程序,文件系统是紧跟Linux内核放置,由内核加载,主要存放用户应用程序和配置信息。
在嵌入式的环境之下,内存和外存资源都需要节约使用。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式linux下常见的文件系统RomFS:只读文件系统,可以放在ROM空间,也可以在系统的RAM中,嵌入式linux中常用来作根文件系统•RamFS:利用VFS自身结构而形成的内存文件系统,使用系统的RAM空间•JFFS/JFFS2:为Flash设计的日志文件系统•Yaffs:专门为Nand Flash设计•proc:为内核和内核模块将信息发送给进程提供一种机制,可以查看系统模块装载的信息•devFS:设备文件系统Linux上的Ext2fs•支持4 TB 存储、文件名称最长1012 字符•可选择逻辑块•快速符号链接•Ext2不适合flash设备•是为象IDE 设备那样的块设备设计的,逻辑块大小必须是512 byte、1 KB、2KB等•没有提供对基于扇区的擦除/写操作的良好管理•如果在一个扇区中擦除单个字节,必须将整个扇区复制到RAM,然后擦除,再重写入•在出现电源故障时,Ext2fs 是不能防止崩溃的•文件系统不支持损耗平衡,缩短了flash的寿命jffs/jffs2文件系统的优缺点•日志文件系统•提供了更好的崩溃、掉电安全保护•jffs2支持对flash的均匀磨损•在扇区级别上执行闪存擦除/写/读操作要比Ext2文件系统好•文件系统接近满时,JFFS2 会大大放慢运行速度——垃圾收集Nand上yaffs文件系统的优势•专门为Nand flash设计的日志文件系统•jffs/jffs2不适合大容量的Nand flash•jffs的日志通过jffs_node建立在RAM中,占用RAM空间:对于128MB的Nand大概需要4MB的空间来维护节点•启动的时候需要扫描日志节点,不适合大容量的Nand flash•FAT系统没有日志编译yaffs文件系统•mtd的最新补丁升级?•接口更新,适合与yaffs•与原有的mtd驱动程序不兼容,需要重写•如果使用旧mtd驱动需要定义Makefile中MTD_OLD = -DCONFIG_YAFFS_USE_OLD_MTD•参考文档:yaffs-rootfs-howto•最新版的yaffs网站:/armlinux/projects/yaffs使用yaffs文件系统•通过cat /proc/yaffs命令可以看到yaffs系统的相关信息•mount -t yaffs /dev/mtdblock/0 /mnt/yaffs关于Linux文件系统JFFS全称为:The Journalling Flash File System(日志闪存文件系统)最初由瑞典的Axis Communications 开发,Red Hat 的David Woodhouse 对它进行了改进。
作为用于微型嵌入式设备的原始闪存芯片的实际文件系统而出现。
JFFS文件系统是日志结构化的,这意味着它基本上是一长列节点。
每个节点包含有关文件的部分信息—可能是文件的名称、也许是一些数据。
相对于Ext2 fs,JFFS 因为有以下这些优点而在无盘嵌入式设备中越来越受欢迎:1 JFFS 在扇区级别上执行闪存擦除/写/读操作要比Ext2 文件系统好。
2 JFFS 提供了比Ext2 更好的崩溃/掉电安全保护。
当需要更改少量数据时,Ext2 文件系统将整个扇区复制到内存(DRAM)中,在内存中合并新数据,并写回整个扇区。
这意味着为了更改单个字,必须对整个扇区(64 KB)执行读/擦除/写例程—这样做的效率非常低。
要是运气差,当正在DRAM 中合并数据时,发生了电源故障或其它事故,那么将丢失整个数据集合,因为在将数据读入DRAM 后就擦除了闪存扇区。
JFFS 附加文件而不是重写整个扇区,并且具有崩溃/掉电安全保护这一功能。
3 这可能是最重要的一点:JFFS 是专门为象闪存芯片那样的嵌入式设备创建的,所以它的整个设计提供了更好的闪存管理。
要构建JFFS文件系统,首先要有硬件设备FLASH及支持JFFS文件系统的操作系统。
摘要:本文主要分析了uclinux 2.4内核的jffs文件系统机制。
希望能对基于uclinux开发产品的广大工程师有所帮助。
关键词:uclinux vfs jffs申明:这份文档是按照自由软件开放源代码的精神发布的,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布内容的权利。
发布本文的目的是希望它能对读者有用,但没有任何担保,甚至没有适合特定目的的隐含的担保。
更详细的情况请参阅GNU 通用公共许可证(GPL),以及GNU 自由文档协议(GFDL)。
你应该已经和文档一起收到一份GNU 通用公共许可证(GPL)的副本。
如果还没有,写信给:The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,MA02139, USA欢迎各位指出文档中的错误与疑问一、flash读写的特殊性对于嵌入式系统,flash是很常见的一种设备,而大部分的嵌入式系统都是把文件系统建立在flash之上,由于对flash操作的特殊性,使得在flash上的文件系统和普通磁盘上的文件系统有很大的差别,对flash操作的特殊性包括:(1)不能对单个字节进行擦除,最小的擦写单位是一个block,有时候也称为一个扇区。
典型的一个block的大小是64k。
不同的flash会有不同,具体参考flash芯片的规范。
(2)写操作只能对一个原来是空(也就是该地址的内容是全f)的位置操作,如果该位置非空,写操作不起作用,也就是说如果要改写一个原来已经有内容的空间,只能是读出该sector到ram,在ram中改写,然后写整个sector。
由于这些特殊写,所以在flash这样的设备上建立文件也有自己独特的特点,下面我们就以jffs为例进行分析。
二、jffs体系结构介绍1、存储结构在jffs中,所有的文件和目录是一样对待的,都是用一个jffs_raw_inode来表示整个flash上就是由一个一个的raw inode排列组成,一个目录只有一个raw inode,对于文件则是由一个或多个raw inode组成。
2、文件组成在文件系统mount到flash设备上的时候,会扫描flash,从而根据flash上的所有属于一个文件的raw inode建立一个jffs_file结构以及node list。
下面的图显示了一个文件的组成一个文件是由若干个jffs_node组成,每一个jffs_node是根据flash上得jffs_raw_inode 而建立的,jffs_file主要维护两个链表版本链表:主要是描述该node创建的早晚,就是说version_head指向的是一个最老的node,也就意味着垃圾回收的时候最该回收的就是这个最老的node。
区域链表:这个链表主要是为读写文件创建的,version_head指向的node代表的文件数据区域是0~~~n-1 之后依次的节点分别是n~~~m-1 m~~~~o-1 …….其中n<M<="" p="" />3、操作对文件的读操作应该是比较简单,但是写操作,包括更改文件名等操作都是引起一个新的jffs_node的诞生,同时要写一个相映的raw inode到flash上,这样的操作有可能导致前面的某个jffs_node上面的数据完全失效,从而导致对应flash上的raw inode的空间成为dirty。
下面举一个例子可能会更清楚一些。
一个文件的range list是由上面的三个jffs_node组成,当我们做如下写操作的时候lseek( fd, 10, SEEK_SET );write( fd, buf,40 );第一个和最后一个node被截短了,第二个node完全被新数据替换,该node会从链表上摘下来,flash上空间变成dirty。
如果做如下写操作的时候lseek( fd, 23, SEEK_SET );write( fd, buf,5 );此时,第二个node被分裂成两个node,同时产生一个新的node,range链表的元素变成五个。
基于Linux2.6的YAFFS文件系统移植v1.0,2005-6-6一、YAFFS文件系统简介YAFFS,Yet Another Flash File System,是一种类似于JFFS/JFFS2的专门为Flash设计的嵌入式文件系统。
与JFFS相比,它减少了一些功能,因此速度更快、占用内存更少。
YAFFS和JFFS都提供了写均衡,垃圾收集等底层操作。
它们的不同之处在于:(1)、JFFS是一种日志文件系统,通过日志机制保证文件系统的稳定性。
YAFFS仅仅借鉴了日志系统的思想,不提供日志机能,所以稳定性不如JAFFS,但是资源占用少。
(2)、JFFS中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。
(3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。
YAFFS 还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。
NAND Flash大多采用MTD+YAFFS的模式。
MTD(Memory Technology Devices,内存技术设备)是对Flash 操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分开。
二、YAFFS文件系统的移植yaffs代码可以从/armlinux/projects/下载(yaffs代码包括yaffs_ecc.c,yaffs_fileem.c,yaffs_fs.c,yaffs_guts.c,yaffs_mtdif.c,yaffs_ramem.c。
)表一Yaffs文件系统源代码相关文件及功能描述文件名功能yaffs_ecc.c ECC校验算法yaffs_fileem.c 测试flashyaffs_fs.c 文件系统接口函数yaffs_guts.c Yaffs文件系统算法yaffs_mtdif.c NAND函数yaffs_ramem.c Ramdisk实现1.内核中没有YAFFS,所以需要自己建立YAFFS目录,并把下载的YAFFS代码复制到该目录下面。
#mkdir fs/yaffs#cp *.c(yaffs source code) fs/yaffs2.修改fs/Kconfig,使得可以配置yaffs :source "fs/yaffs/Kconfig"3.修改fs/makefile,添加如下内容:obj-$(CONFIG_YAFFS_FS) += yaffs/4.在fs目录下生成yaffs目录,并在里面生成一个makefile 和KconfigMakefile 内容为:yaffs-objs := yaffs_fs.o yaffs_guts.o yaffs_mtdif.o yaffs_ecc.oEXTRA_CFLAGS += $(YAFFS_CONFIGS) -DCONFIG_KERNEL_2_6Kconfig内容为:## YAFFS file system configurations#config YAFFS_FStristate "Yet Another Flash Filing System(YAFFS) file system support"helpYAFFS, for Yet Another Flash Filing System, is a filing systemoptimised for NAND Flash chips.To compile the YAFFS file system support as a module, choose M here: the module will be called yaffs.If unsure, say N.Further information on YAFFS is available at</yaffs/>.config YAFFS_MTD_ENABLEDbool "NAND mtd support"depends on YAFFS_FShelpThis adds the yaffs file system support for working with a NAND mtd.If unsure, say Y.config YAFFS_RAM_ENABLEDbool "yaffsram file system support"depends on YAFFS_FShelpThis adds the yaffsram file system support. Nice for testing on x86,but uses 2MB of RAM. Don't enable for NAND-based targets.If unsure, say N.comment "WARNING: mtd and/or yaffsram support should be selected" depends on YAFFS_FS && !YAFFS_MTD_ENABLED && !YAFFS_RAM_ENABLEDconfig YAFFS_USE_OLD_MTDbool "Old mtd support"depends on YAFFS_FS && 0helpEnable this to use the old MTD stuff that did not have yaffs support.You can use this to get around compilation problems, but the bestthing to do is to upgrade your MTD support. You will get better speed.If unsure, say N.config YAFFS_USE_NANDECCbool "Use ECC functions of the generic MTD-NAND driver"depends on YAFFS_FSdefault yhelpThis enables the ECC functions of the generic MTD-NAND driver. This will not work if you are using the old mtd.NB Use NAND ECC does not work at present with yaffsram.If unsure, say Y.config YAFFS_ECC_WRONG_ORDERbool "Use the same ecc byte order as Steven Hill's nand_ecc.c" depends on YAFFS_FShelpThis makes yaffs_ecc.c use the same ecc byte order asSteven Hill's nand_ecc.c. If not set, then you get thesame ecc byte order as SmartMedia.If unsure, say N.config YAFFS_USE_GENERIC_RWbool "Use Linux file caching layer"default ydepends on YAFFS_FShelpUse generic_read/generic_write for reading/writing files. This enables the use of the Linux file caching layer.If you disable this, then caching is disabled and file read/write is direct.If unsure, say Y.config YAFFS_USE_HEADER_FILE_SIZEbool "Use object header size"depends on YAFFS_FShelpWhen the flash is scanned, two file sizes are constructed:* The size taken from the object header for the file.* The size figured out by scanning the data chunks.If this option is enabled, then the object header size is used, otherwise the scanned size is used.If unsure, say N.config YAFFS_DISABLE_CHUNK_ERASED_CHECKbool "Turn off debug chunk erase check"depends on YAFFS_FSdefault yhelpEnabling this turns off the test that chunks are erased in flash before writing to them. This is safe, since the write verification will fail. Suggest enabling the test (ie. say N)during development to help debug things.If unsure, say Y.#config YAFFS_DISABLE_WRITE_VERIFY# bool "Disable write verify (DANGEROUS)"# depends on YAFFS_FS && EXPERIMENTAL# help# I am severely reluctant to provide this config. Disabling the# verification is not a good thing to do since NAND writes can # fail silently. Disabling the write verification will cause your# teeth to rot, rats to eat your corn and give you split ends.# You have been warned. ie. Don't uncomment the following line. ## If unsure, say N.#config YAFFS_SHORT_NAMES_IN_RAMbool "Cache short names in RAM"depends on YAFFS_FSdefault yhelpIf this config is set, then short names are stored with theyaffs_Object. This costs an extra 16 bytes of RAM per object,but makes look-ups faster.If unsure, say Y.5.在/arch/arm/mach-s3c2410/mach-smdk2410.c找到smdk_default_nand_part结构,修改nand分区,如下:struct mtd_partition smdk_default_nand_part[] = {[0] = {.name = "vivi",.size = 0x00020000,.offset = 0x00000000,},[1] = {.name = "param",.size = 0x00010000,.offset = 0x00020000,},[2] = {.name = "kernel",.size = 0x00100000,.offset = 0x00030000,},[3] = {.name = "root",.size = 0x01900000,.offset = 0x00130000,},[4] = {.name = "user",.size = 0x025d0000,.offset = 0x01a30000,}};注:此分区要结合vivi里面的分区来进行设置。