ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:23.64KB ,
资源ID:11513085      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-11513085.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(嵌入式linux下的文件系统.docx)为本站会员(b****3)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

嵌入式linux下的文件系统.docx

1、嵌入式linux下的文件系统嵌入式linux下常见的文件系统RomFS:只读文件系统,可以放在ROM空间,也可以在系统的RAM中,嵌入式linux中常用来作根文件系统 RamFS:利用VFS自身结构而形成的存文件系统,使用系统的RAM空间 JFFS/JFFS2:为Flash设计的日志文件系统 Yaffs:专门为Nand Flash设计 proc:为核和核模块将信息发送给进程提供一种机制,可以查看系统模块装载的信息 devFS:设备文件系统Linux上的Ext2fs 支持4 TB 存储、文件名称最长1012 字符 可选择逻辑块 快速符号 Ext2不适合flash设备 是为象IDE 设备那样的块设

2、备设计的,逻辑块大小必须是512 byte、1 KB、2KB等 没有提供对基于扇区的擦除写操作的良好管理 如果在一个扇区中擦除单个字节,必须将整个扇区复制到RAM,然后擦除,再重写入 在出现电源故障时,Ext2fs 是不能防止崩溃的 文件系统不支持损耗平衡,缩短了flash的寿命jffs/jffs2文件系统的优缺点 日志文件系统 提供了更好的崩溃、掉电安全保护 jffs2支持对flash的均匀磨损 在扇区级别上执行闪存擦除写读操作要比Ext2文件系统好 文件系统接近满时,JFFS2 会大大放慢运行速度垃圾收集Nand上yaffs文件系统的优势 专门为Nand flash设计的日志文件系统 jf

3、fsjffs2不适合大容量的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:.aleph1.co.uk/armli

4、nux/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文件系统是日志结构化的,这意味着它基本上是一长列节点。每个节点包含有

5、关文件的部分信息 可能是文件的名称、也许是一些数据。相对于 Ext2 fs,JFFS 因为有以下这些优点而在无盘嵌入式设备中越来越受欢迎: 1 JFFS 在扇区级别上执行闪存擦除写读操作要比 Ext2 文件系统好。 2 JFFS 提供了比 Ext2 更好的崩溃掉电安全保护。当需要更改少量数据时,Ext2 文件系统将整个扇区复制到存(DRAM)中,在存中合并新数据,并写回整个扇区。这意味着为了更改单个字,必须对整个扇区(64 KB)执行读擦除写例程 这样做的效率非常低。要是运气差,当正在 DRAM 中合并数据时,发生了电源故障或其它事故,那么将丢失整个数据集合,因为在将数据读入 DRAM 后就擦

6、除了闪存扇区。JFFS 附加文件而不是重写整个扇区,并且具有崩溃掉电安全保护这一功能。 3 这可能是最重要的一点:JFFS 是专门为象闪存芯片那样的嵌入式设备创建的,所以它的整个设计提供了更好的闪存管理。 要构建JFFS文件系统,首先要有硬件设备FLASH及支持JFFS文件系统的操作系统。摘要:本文主要分析了uclinux 2.4核的jffs文件系统机制。希望能对基于uclinux开发产品的广大工程师有所帮助。关键词:uclinux vfs jffs申明:这份文档是按照自由软件开放源代码的精神发布的,任何人可以免费获得、使用和重新发布,但是你没有限制别人重新发布你发布容的权利。发布本文的目的是

7、希望它能对读者有用,但没有任何担保,甚至没有适合特定目的的隐含的担保。更详细的情况请参阅 GNU 通用公共许可证(GPL),以及GNU 自由文档协议(GFDL)。你应该已经和文档一起收到一份GNU 通用公共许可证(GPL)的副本。如果还没有,写信给:The Free Software Foundation, Inc., 675 Mass Ave, Cambridge,MA02139, USA欢迎各位指出文档中的错误与疑问一、flash读写的特殊性对于嵌入式系统,flash是很常见的一种设备,而大部分的嵌入式系统都是把文件系统建立在flash之上,由于对flash操作的特殊性,使得在flash上

8、的文件系统和普通磁盘上的文件系统有很大的差别,对flash操作的特殊性包括:(1) 不能对单个字节进行擦除,最小的擦写单位是一个block,有时候也称为一个扇区。典型的一个block的大小是64k。不同的flash会有不同,具体参考flash芯片的规。(2) 写操作只能对一个原来是空(也就是该地址的容是全f)的位置操作,如果该位置非空,写操作不起作用,也就是说如果要改写一个原来已经有容的空间,只能是读出该sector到ram,在ram中改写,然后写整个sector。由于这些特殊写,所以在flash这样的设备上建立文件也有自己独特的特点,下面我们就以jffs为例进行分析。二、jffs体系结构介绍

9、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_fil

10、e主要维护两个链表版本链表:主要是描述该node创建的早晚,就是说version_head指向的是一个最老的node,也就意味着垃圾回收的时候最该回收的就是这个最老的node。区域链表:这个链表主要是为读写文件创建的,version_head指向的node代表的文件数据区域是0n-1 之后依次的节点分别是 nm-1 mo-1 .其中nM3、操作对文件的读操作应该是比较简单,但是写操作,包括更改文件名等操作都是引起一个新的jffs_node的诞生,同时要写一个相映的raw inode到flash上,这样的操作有可能导致前面的某个jffs_node上面的数据完全失效,从而导致对应flash上的ra

11、w 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链表的元素变成五个。基于Linu

12、x2.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中使用多级链表管理需要回收的脏块,并且使用系统生成伪随机

13、变量决定要回收的块,通过这种方法能提供较好的写均衡,在YAFFS中是从头到尾对块搜索,所以在垃圾收集上JFFS的速度慢,但是能延长NAND的寿命。(3)、JFFS支持文件压缩,适合存储容量较小的系统;YAFFS不支持压缩,更适合存储容量大的系统。YAFFS 还带有NAND芯片驱动,并为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD和VFS,直接对文件进行操作。NAND Flash大多采用MTD+YAFFS的模式。MTD( Memory Technology Devices,存技术设备)是对Flash操作的接口,提供了一系列的标准函数,将硬件驱动设计和系统程序设计分

14、开。二、YAFFS文件系统的移植yaffs代码可以从.aleph1.co.uk/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 R

15、amdisk实现1.核中没有YAFFS,所以需要自己建立YAFFS目录,并把下载的YAFFS代码复制到该目录下面。#mkdir fs/yaffs#cp *.c(yaffs source code) fs/yaffs2.修改fs/Kconfig,使得可以配置yaffs :source fs/yaffs/Kconfig3修改fs/makefile,添加如下容:obj-$(CONFIG_YAFFS_FS) += yaffs/4.在fs目录下生成yaffs目录,并在里面生成一个makefile 和KconfigMakefile 容为:yaffs-objs := yaffs_fs.o yaffs_gut

16、s.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 supporthelpYAFFS, for Yet Another Flash Filing System, is a filing systemoptimised for NAND Flash c

17、hips.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.config YAFFS_MTD_ENABLEDbool NAND mtd supportdepends on YAFFS_FShelpThis adds the yaffs file system support for working with a NAND m

18、td.If unsure, say Y.config YAFFS_RAM_ENABLEDbool yaffsram file system supportdepends on YAFFS_FShelpThis adds the yaffsram file system support. Nice for testing on x86,but uses 2MB of RAM. Dont enable for NAND-based targets.If unsure, say N.comment WARNING: mtd and/or yaffsram support should be sele

19、cteddepends on YAFFS_FS & !YAFFS_MTD_ENABLED & !YAFFS_RAM_ENABLEDconfig YAFFS_USE_OLD_MTDbool Old mtd supportdepends 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

20、 MTD support. You will get better speed.If unsure, say N.config YAFFS_USE_NANDECCbool Use ECC functions of the generic MTD-NAND driverdepends 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

21、 work at present with yaffsram.If unsure, say Y.config YAFFS_ECC_WRONG_ORDERbool Use the same ecc byte order as Steven Hills nand_ecc.cdepends on YAFFS_FShelpThis makes yaffs_ecc.c use the same ecc byte order asSteven Hills nand_ecc.c. If not set, then you get thesame ecc byte order as SmartMedia.If

22、 unsure, say N.config YAFFS_USE_GENERIC_RWbool Use Linux file caching layerdefault ydepends on YAFFS_FShelpUse generic_read/generic_write for reading/writing files. Thisenables the use of the Linux file caching layer.If you disable this, then caching is disabled and file read/writeis direct.If unsur

23、e, say Y.config YAFFS_USE_HEADER_FILE_SIZEbool Use object header sizedepends 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 hea

24、der size is used,otherwise the scanned size is used.If unsure, say N.config YAFFS_DISABLE_CHUNK_ERASED_CHECKbool Turn off debug chunk erase checkdepends on YAFFS_FSdefault yhelpEnabling this turns off the test that chunks are erased in flashbefore writing to them. This is safe, since the write verif

25、icationwill 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# verifica

26、tion 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. Dont uncomment the following line.# If unsure, say N.#config YAFFS_SHORT_NAMES_IN_RAMbool Cac

27、he short names in RAMdepends 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分区,如下:struc

28、t 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 = 0x0

29、25d0000,.offset = 0x01a30000,;注:此分区要结合vivi里面的分区来进行设置。6配置核时选中MTD支持:Memory Technology Devices (MTD) - Memory Technology Device (MTD) supportMTD partitioning support- User Modules And Translation Layers Direct char device access to MTD devices Caching block device access to MTD devicesNAND Flash Device

30、 Drivers - NAND Device Support NAND Flash support for S3C2410 SoCS3C2410 NAND driver debug 7配置核时选中YAFFS支持:File systems -Miscellaneous filesystems - Yet Another Flash Filing System(YAFFS) file system supportNAND mtd supportUse ECC functions of the generic MTD-NAND driverUse Linux file caching layerTurn off debug chunk erase checkCache short names in RAM8.编译核并将核下载到开发板的flash中。三、Yaffs文件系统测试:1.核启动之后,在启动信息里面可以

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2