维普资讯 http://www.cqvip.com 第6期 计算机技术与发展 VoI,16 No.4 2 00 6 年4月 COMPUTE,R TECHNOLOGY AND DEVELOPMENT Apr,2006 嵌入式Linux下JFFS2文件系统的实现 张 勇,裘雪红 (西安电子科技大学计算机学院,陕西西安710071) 摘要:文件系统是操作系统的重要组成部分之一,它为操作系统内核提供了存储和管理数据的机制,并为用户程序提供 了对数据的访问接口。嵌入式文件系统不仅要具有一般文件系统的功能,还要满足嵌入式系统的特殊要求。JFFS2文件 系统就是专门针对在嵌入式系统中得到广泛应用的Flash存储器而设计的,能很好地满足嵌入式系统的各项要求。文中介 绍了嵌入式Linux系统下的Flash存储器和日志文件系统,并结合一个具体的实验平台,给出了JFFS2文件系统的移植和 实现过程。通过在嵌入式Linux下使用JFFS2文件系统,可以为应用程序的开发奠定良好的基础。 关键词:嵌入式系统;Linux;文件系统;日志文件系统 中图分类号:1]P316 文献标识码:A 文章编号:1005—3751(2006)04—0138—03 Implementation of JFFS2 File System in Embedded Linux System ZHANG Yong,QIU Xue-hong (Sehool of Computer,Xidian University,Xi’an 710071,China) Al ̄tract:The ifle syst锄is one of the important parts of an operation system.It pmmdes a mechanism to store and manage the data for the kernd of operation system.and fin access interface for the user applications.The embedded file system shall not only support the functions of a l ̄l'mal ifle s ̄tme,but also satisfy the special requirements of the embedded s ̄tems. e j file s ̄tern is speciifcally designed ofr the flash devices which have been widely used in the embedded systems。and it can satisfy all kinds of requirements of the mebedded sys- telrm. s paper introduces the lfash memory nad joumalling file system in the embedded Linux ̄3rstea-n,and describes the process of port- ing and implmeenting of the JFFS2 file system based on al1 actual experimental platform.By using the JFFS2 file system in the embedded Linux system.can establish a go,xt foundation ofr application development. Key words,embedded syste ̄l;Linux;file system;JFTS2 1文件系统 统,采用了虚拟文件系统(VFS,Visual Filesystem Switch) 文件系统是一个操作系统中最重要的部分之一,它为 技术【2 J,虚拟文件系统是对多种实际文件系统的共有功能 操作系统提供了一种结构化存储和管理数据的方式。文 的抽象,它屏蔽了各种不同文件系统在实现细节上的差 件系统的主要功能是对数据的物理存储进行管理,并向用 异,为用户程序提供了统一的、抽象的、标准的接口对文件 户提供对数据的访问接口。用户程序建立在文件系统上, 系统进行访问,如open(),read(),write()等。这样,用户 通过文件系统访问数据,而不需要直接对物理存储设备进 程序就不需要关心所操作的具体文件是属于哪种文件系 行操作。 统,以及这种文件系统是如何设计与实现的,对所有文件 最初的操作系统一般都只支持单一的一种文件系统, 的访问方式都是完全相同的。VFS与实际文件系统的关 并且文件系统和操作系统内核紧密关联在一起,而LinuX 系如图1所示。 操作系统的文件系统结构是树状的,在根目录“/’下有许 多子目录,每个目录都可以采用各自不同的文件系统类 型…1。Linux中的文件不仅指的是普通的文件和目录,而 且将设备也当作一种特殊的文件,因此,每种不同的设备, 从逻辑上都可以看成是一种不同的文件系统。 在Linux操作系统中,为了支持多种不同的文件系 图IⅥ S与实际文件系统的关系示意图 收稿日期:2005一o7~29 作者简介:张 ̄(1981一),男,陕西蓝田人,硕士研究生,研究方向 2 Flash存储器 为嵌人式操作系统;裘雪红,硕士研究生导师,教授。研究方向为多媒 由于具有高可靠性、高存储密度、低价格、非易失、擦 体信息处理。 写方便等优点,FIash存储器取代了传统的EPROM和 维普资讯 http://www.cqvip.com 第4期 张 勇等:嵌入式lAnux下JFFS2文件系统的实现 ・ l39- EEPROM,在嵌入式系统中得到了广泛的应用l3』。Fl ̄sh 的1.1nttx予系统,提供了对Flash操作的一系列标准接口, 存储器可以分为若干块,每块义由若干页组成,对Flash 能更好地支持对Flash的擦除和读写操作 i。通过MTD 技术,可以将硬件驱动设计和系统程序设计分开。为了使 用JFFS2文件系统,需要把MTD子系统编译到内核中, MTD子系统提供MTD Cf—tAR和MTD—BLoCK这两个 模块用于对Flsah的访问,MTD Ct L R将Flash表现为字 符设备,与其关联的设备文件是/dev/mtd0等,MT1)一 BLOCK将Flash表现为块设备,与其关联的设备文件是/ dev/mt(1bk)ck()等;JFFS2文件系统就建立在MTD— 的擦除操作以块为单位进行,而读和写操作以页为单位进 行。Flash存储器在进行写入操作之前必须先擦除目标 块。根据所采用的制造技术不同,Flash存储器主要分为 Nor Flash和Nand Flash两种。 1)Nor Flash。 Nor Flsah通常容量较小,其主要特点是 片内执行 (XIP,execute In Place),就是指程序代码可以直接在 Flash内运行,而不需要将代码读取到 中再执行。 Nor Fl船h具有RAM接口,易于访问,它的缺点是擦除电 路复杂,写速度和擦除速度都比较慢,最大擦写次数约10 万次,典型的块大小是128kB。 2)Nand Flsah。 Nand Flash通常容量较大,具有很高的存储密度,从 而降低了单位价格。Nand Flash的块尺寸较小,典型大小 为8ltB,擦除速度快,使用寿命也更长,最大擦写次数可以 达到100万次,但是其访问接口是复杂的I/0口。并且坏 块和位反转现象较多,对驱动程序的要求较高。由于Nor Flash和Nand FIash各具特色,因此它们的用途也各不相 同,Nor Flsah一般用来存储体积较小的代码,而Nand Flash则用来存放大体积的数据。 3 Flash文件系统 在嵌入式系统中,也可以在Flash上运行传统的文件 系统,如ext2等,但是这类文件系统没有考虑Flsah存储 器的物理特性和使用特点,例如:Flsah存储器中各个块的 最大擦除次数是有限的,如果能够均匀地使用各个块,就 能延长Flash的整体寿命,这就需要磨损均衡的功能;为 了提高Flash存储器的利用率,还应该有对存储空间的碎 片收集功能;在嵌入式系统中,要考虑出现系统意外掉电 的情况,所以文件系统应该有掉电保护的功能,保证系统 在出现意外掉电时也不会丢失数据。因此在Flsah存储 设备上,采用专门针对Flash存储器的要求而设计的 JFF ̄(Joumaling Flash File System Version 2)文件系统更 为合适【4)。 3.1日志文件系统 JFFS2是一种日志文件系统。在日志文件系统中,所 有文件系统的内容变化,如写文件操作等,都被记录到一 个日志中,每隔一段时间,文件系统会对文件的实际内容 进行更新,然后删除这部分日志,重新开始记录。如果对 文件内容的变更操作由于系统出现意外而中断,如系统掉 电等,则系统重新启动时,会根据日志恢复中断以前的操 作,这样系统的数据就更加安全,文件内容将不会因为系 统出现意外而丢失。 3.2姗驱动程序 J 建立在MTD(Memory Technology Devices)技 术的基础上,MTD是专门为访问Flash存储设备而设计 BL()CK模块的基础之上。 3.3 JI ̄YS2文件系统 JFFS(Joumaling Flash File System)是瑞典的Axis Commtmicatlons公司专门针对嵌入式系统中的Flash存储 器的特性而设计的一种日志文件系统。Redhat公司的 David Woodhouse在JFFS的基础上进行了改进,从而发布 了JFF ̄(JournalingFlashFileSystemVersion2)。和JFFS 相比,JFFS2支持更多节点类型,提高了磨损均衡和碎片 收集的能力,增加了对硬链接的支持。JFFS2还增加了数 据压缩功能,这更利于在容量较小的Flsah中使用。和传 统的Linux文件系统如ext2相比,JFFS2处理擦除和读写 操作的效率更高,并且具有完善的掉电保护功能,使存储 的数据更加安全。在嵌入式系统中使用JFFS2文件系统 的缺点很少,只是当文件系统快要满时,J 会放慢运 行速度,这是由于碎片收集的原因。 4 Jn 2文件系统的实现 文中所用的目标板CPU是韩国Samsung公司的 ¥3C2410X,这是一种基于ARM920T核的嵌入式微处理 器,所用的Flash存储器是Intel公司Strata Flsah系列中 的E28Fl28,这是一种典型的Nor Flsah芯片,容量为 16Ⅷ。文中所采用的操作系统内核版本是Lirmx一2.4. 18一rmk7一pxal,这个版本在嵌入式系统中有着广泛的应 用。 4.1裁减内核 首先进入drivers/mrd/nmps/[ ̄录下,编写Flash芯片 的map文件,例如文件名为s3e2410一strata.c。在map文 件中需要定义Flash的基地址、大小、宽度、分区表、读写 函数、初始化和释放函数等。其中分区表的一个例子如 下: static struct mtd—partition s3c2410一partltiorks[]= { { n.3nle:“bc ̄ ̄tloader”, size:0o00030000, offer:OxO, mask—flags:MTI)一WRITEABLE. f, { nalne:“kernel”, 维普资讯 http://www.cqvip.com -140- 计算机技术与发展 第l6卷 size:0x000d0000, 为“2”,即16字节。然后选中自己加入的“Intel Strata offset:~nDPART—OFS AFIPEND, Flash device mapped on S3C2410”这一项。 mask—flags:MTD—WRITEABLE, 2)在“File systems”选项中选择: }, <*>Joumalling Flash File System v2(jr.'s2)support { 对于其他功能,可根据自己的实际情况,进行裁减,然 nalTle:“roods”, 后保存退出,接下来编译出操作系统内核映像。 size:Mm]PART—SIZ—FULL. 4.2制作根文件系统映像 offset"MTDPART—OFS—APPEND, } 要制作根文件系统的映像,可以借助于BusyBox生成 }; 所需的大部分文件,然后自己再补充建立/dev,/proc,/etc 这里将Flash分成3个分区,分别存放引导装载程序 等目录,在dev目录下建立设备文件,例如: ¥瑚kn0d&v/console C 5 1 (B ̄tloader)、内核和根文件系统。mask—flags:MTD— WRITEABIE表示分区是只读的;MⅡ)PART—OFS—AP. 目录和文件建立完成后,使用mkfs.jffs2工具产生文 PEND表示分区位置紧挨着上一个分区;MⅡ)PART— 件系统映像: SIZ—H兀.L_表示占用剩余的全部空间。文中将JFFS2文 ¥./mkfs.jffs2一e0x20000一d./rootf ̄iir—Ojffs2. img 件系统的映像存放在第3个分区上,作为系统的根文件系 统。 其中一e 0x20000表示擦除块的大小为128kB;一d表 示文件系统所在的目录;一O表示文件系统映像名。 然后修改Makefile文件,在其中加入以下语句: 4.3烧写并运行 obj一¥(CON'FIG—MID一¥3C2410) +=s3c2410一strata.O 根据分配的分区表信息,将Bootloader、内核映像和根 再修改Config.in文件,在适当位置加入以下语句: 文件系统映像分别写入Flsah中的指定区域,在Bc ̄tloader dep—tristate‘Intel Strata Flash device mapped Oil¥3C2410’ 中设置内核命令行,例如“noinitrd root=/dev/mtdblock3 O3NFIG—MTD一¥3C2410¥OONFIG—MTD—CFI init=/1inLlxrc console=ttyS0”,然后引导系统。 然后回到Linux源码目录下,运行make menuconfig 对操作系统内核进行配置与裁减,要在Intel E28F128 5结束语 Flash上使用JFFS2文件系统,要特别注意以下两个选项: JFFS2文件系统是专门针对嵌入式系统中的Flsah存 1)在“Memory Technology Devices(MTO)”选项中选 储芯片设计的,由于JFFS2自身的特点,适合于在Nor 择: h系列芯片上使用,本文以Intel Strata h E28FI28 <*>Memory Technology Device(MTD)support 为例,介绍了在NorFlash上实现JFFS2文件系统的过程, <*>MTD partitioning support 为嵌入式Linu)【下的应用程序开发奠定了基础。 <*>Cashing bb出device accesstoMTD deviecs RAM/ROM/Flash chip drivers一一一> 参考文献: <*>Detect flash chips by Common Flash Interfaec(CFI) [1]陈渝,李明,杨哗,等.源码开放的嵌入式系统软件 probe 分析与实践[M].北京:北京航空航天大学出版社,2004. <*>SupportforIntd/Sharpflash chips [2] 毛德操,胡希明.UnLD【内核源代码情景分析[M].杭卅I:浙 Mappingdriversfor chip al ess一一一> 江大学出版社,2001. <*>CFI Flsah device in physical memory map [3]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京: (0)physical Start address of lfash mapping 人民邮电出版社,2004. (1000000)Physical length of lfsah mapping [4]WcoShouse D.JFFS:The JoumaUingFlashFileSystem[EB/ (2)Buswidthin octets OL].http://sources.redhat.eomdffs2/jfs2.pdf,2001—10. <*>Intel StrataFlash devicemapped OnS3C2410 [5]Santhanam A K,Kulkami V.嵌入式设备上的Linux系统开 这里设置了Flash芯片的起始地址、大小以及宽度, 发[EB/OL]http://www一128.ibm.com/developerworks/ 比如:起始地址为“O”,大小为“1oooooo”,即16MB,宽度 cn/linux/embed/embdev/。2002—03. (上接第137页) [7]董士海.人机交互的进展及面临的挑战[J].计算机辅助设 程学院学报,2005,19(2):38—40. 计与图形学学报,20o4,16(1):1—13. [5]苏冬平,陈文明,罗首章,等,人机交互调整炼钢连铸调度 【8]Wdser M.The computer for the 21st century[J].Scientiifc 计划[J].冶金自动化,2O05(3):17—2O. American,1991,265(3):94—104. [6]石钟慈.第三种科学方法——计算机时代的科学计算[M]. [9]陈桂友,孙同景,雷印胜,等.PowerBuilder数据库开发技术 北京:清华大学出版社;广州:暨南大学出版社,2000. [M].北京:机械工业出版社,20o2.