您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 3.嵌入式Linux内核,文件系统
2009-9-1周朋朔feb12001@163.com1嵌入式Linux内核,文件系统周朋朔feb12001@163.comCell:139580704582009-9-1周朋朔feb12001@163.com2参考资料z电子工业出版社,杨水清等,ARM嵌入式Linux系统开发详解:Chap11,122009-9-1周朋朔feb12001@163.com3目录zLinux内核z文件系统z制作文件系统z实验2009-9-1周朋朔feb12001@163.com4Linux内核zLinux内核makefilezLinux内核配置zmakemenuconfigz内核编译zmakezImagez内核配置选项(见教材)z嵌入式开发中,Linux内核z裁剪z移植2009-9-1周朋朔feb12001@163.com5目录zLinux内核z文件系统z制作文件系统z实验2009-9-1周朋朔feb12001@163.com6嵌入式文件系统z嵌入式文件系统:zExt2/Ext3zRomfszRamdiskzCramfszJffs/jffs2zTmpfszYaffsz用户可以根据可靠性、健壮性和增强的功能的需求来选择文件系统的类型。2009-9-1周朋朔feb12001@163.com7z要求文件系统在频繁的文件操作(例如,新建,删除,截断)下能够保持较高的读写性能,要求低碎片化。zLinux下的日志文件系统(XFS,ReiserFS,Ext3等)能保持数据的完整性,但消耗过多系统资源使之不能成为嵌入式系统中的主流应用。并且这些都是专为硬盘类存储设备优化,对于flash这类的存储介质并不适用。z现有的嵌入式文件系统的碎片化的问题,大部分的嵌入式设备只给用户提供了只读文件系统,给用户带来不便。z嵌入式文件系统的载体是以Flash为主的存储介质,所以为了延长Flash的使用寿命,应该尽量减少对Flash的写入操作。z文件系统采用DirectI/O的话,使I/O效率明显降低,增加了写入次数;但采用延时写的话,虽然能够降低碎片问题,如果加入日志系统的话,有不能保证数据的安全性。这是一个矛盾。嵌入式Linux对文件系统的要求:2009-9-1周朋朔feb12001@163.com8z嵌入式Linux常见各种文件系统介绍z见附2009-9-1周朋朔feb12001@163.com9FlashzNorzNOR比较适合存储程序代码z容量一般较小2009-9-1周朋朔feb12001@163.com10NandFlashzNAND闪存的存储单元为页和块。一般来说,128MB以下容量芯片的一页大小为528字节,依次分为2个256字节的主数据区,最后是16字节的备用空间;一个块由若干页组成,通常为32页;一个存储设备又由若干块组成。2009-9-1周朋朔feb12001@163.com11NandFlashz不是完全可靠的,每块芯片出厂时都有一定比例的坏块存在;z各个存储单元是不可直接改写的,在每次改写操作之前需要先擦除;z擦除操作以块为单位进行,而读写操作通常以页为单位进行;z各块的擦除次数有限,一般为10万~100万次;z使用复杂的I/O口串行存取数据2009-9-1周朋朔feb12001@163.com12Nandflash与Norflash比较2009-9-1周朋朔feb12001@163.com13flash的分区z相关文件zarch/arm/mach-s3c2410/mach-utu2440.c2009-9-1周朋朔feb12001@163.com14Yaffsz专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备。z它是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效地避免意外掉电对文件系统一致性和完整性的影响。zYAFFS文件系统是按层次结构设计的,分为文件系统管理层接口、YAFFS内部实现层和NAND接口层,这样就简化了其与系统的接口设计,可以方便地集成到系统中去。与JFFS相比,它减少了一些功能,因此速度更快,占用内存更少z兼顾损耗平均和系统开销2009-9-1周朋朔feb12001@163.com15YAFFS文件组织结构zYAFFS将文件组织成固定大小(512字节)的数据段。每个文件都有一个页面专门存放文件头,文件头保存了文件的模式、所有者id、组id、长度、文件名等信息。为了提高文件数据块的查找速度,文件的数据段被组织成树形结构。YAFFS在文件进行改写时总是先写入新的数据块,然后将旧的数据块从文件中删除。YAFFS使用存放在页面备用空间中的ECC进行错误检测,出现错误后会进行一定次数的重试,多次重试失败后,该页面被停止使用2009-9-1周朋朔feb12001@163.com16YAFFS物理数据组织zYAFFS充分利用了NAND闪存提供的每个页面16字节的备用空间,参考了SmartMedia的设定,备用空间中6个字节被用作页面数据的ECC,2个字节分别用作块状态字和数据状态字,其余的8字节(64位)用来存放文件系统的组织信息,即元数据。由于文件系统的基本组织信息保存在页面的备份空间中,因此,在文件系统加载时只需要扫描各个页面的备份空间,即可建立起整个文件系统的结构,而不需要像JFFS那样扫描整个介质,从而大大加快了文件系统的加载速度2009-9-1周朋朔feb12001@163.com17YAFFS擦除块和页面分配zYAFFS中用数据结构来描述每个擦除块的状态。该数据结构记录了块状态,并用一个32位的位图表示块内各个页面的使用情况。在YAFFS中,有且仅有一个块处于“当前分配”状态。新页面从当前进行分配的块中顺序进行分配,若当前块已满,则顺序寻找下一个空闲块2009-9-1周朋朔feb12001@163.com18YAFFS垃圾收集机制zYAFFS使用一种多策略混合的算法来进行垃圾回收,将贪心策略和随机选择策略按一定比例混合使用:当满足特定的小概率条件时,垃圾回收器会试图随机选择一个可回收的页面;而在其他情况下,则使用贪心策略回收最“脏”的块。通过使用多策略混合的方法,YAFFS能够有效地改善贪心策略造成的不平均;通过不同的混合比例,则可以控制损耗平均和系统开销之间的平衡。考虑到NAND的擦除很快(和NOR相比可忽略不计),YAFFS将垃圾收集的检查放在写入新页面时进行,而不是采用JFFS那样的后台线程方式,从而简化了设计2009-9-1周朋朔feb12001@163.com19cramfs文件系统zcramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程2009-9-1周朋朔feb12001@163.com20cramfs的特点z采用实时解压缩方式,但解压缩的时侯有延迟。zcramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。z在cramfs中,文件最大不能超过16MB。z支持组标识(gid),但是mkcramfs只将gid的低8位保存下来,因此只有这8位是有效的。z支持硬链接。但是cramfs并没有完全处理好,硬链接的文件属性中,链接数仍然为1.2009-9-1周朋朔feb12001@163.com21mkcramfs的特点IIzcramfs的目录中,没有“.”和“..”这两项。因此,cramfs中的目录的链接数通常也仅有一个。zcramfs中,不会保存文件的时间戳(timestamps)信息。当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时地变更为最新时间,但是不会保存到cramfs文件系统中去。z当前版本的cramfs只支持PAGE_CACHE_SIZE为4096的内核。因此,如果发现cramfs不能正常读写的时侯,可以检查一下内核的参数设置。2009-9-1周朋朔feb12001@163.com22使用cramfsz下载cramfs包z编译生成mkcramfs和cramfsck两个工具2009-9-1周朋朔feb12001@163.com23mkcramfs的命令格式zmkcramfs[-h][-eedition][-ifile][-nname]dirnameoutfilezmkcramfs的各个参数解释如下:z-h:显示帮助信息z-eedition:设置生成的文件系统中的版本号z-ifile:将一个文件映像插入这个文件系统之中(只能在Linux2.4.0以后的内核版本中使用)z-nname:设定cramfs文件系统的名字zdirname:指明需要被压缩的整个目录树zoutfile:最终输出的文件2009-9-1周朋朔feb12001@163.com24cramfsck的命令格式zcramfsck[-hv][-xdir]filezcramfsck的各个参数解释如下:z-h:显示帮助信息z-xdir:释放文件到dir所指出的目录中z-v:输出信息更加详细zfile:希望测试的目标文件2009-9-1周朋朔feb12001@163.com25jffs2文件系统zJFFS文件系统是瑞典Axis通信公司开发的一种基于Flash的日志文件系统,它在设计时充分考虑了Flash的读写特性和用电池供电的嵌入式系统的特点,在这类系统中必需确保在读取文件时,如果系统突然掉电,其文件的可靠性不受到影响。对RedHat的DavidWoodhouse进行改进后,形成了JFFS2。主要改善了存取策略以提高FLASH的抗疲劳性,同时也优化了碎片整理性能,增加了数据压缩功能。需要注意的是,当文件系统已满或接近满时,JFFS2会大大放慢运行速度。这是因为垃圾收集的问题2009-9-1周朋朔feb12001@163.com26jffs2的使用zmkfs.jffs2zcat/proc/mtd查看分区情况z内核对jffs2的支持2009-9-1周朋朔feb12001@163.com27目录zLinux内核z文件系统z制作文件系统z实验2009-9-1周朋朔feb12001@163.com28制作文件系统-BusyboxzBusyboxzUnix工具集,提供常用GNU工具、shell脚本z模块化设计,可裁剪z仅需几百KB的空间即可运行,适合嵌入式系统z常用于实现根文件系统zBusybox用法zBusybox配置编译2009-9-1周朋朔feb12001@163.com29Cramfs、YAFFS、JFFSzCramfszmkcramfs制作根文件系统zmount–oloop–tcramfs******zBusybox制作cramfs作为只读根系统写入flashzYAFFS、JFFSz内核中添加对其支持zFlash擦除后,直接挂载访问z镜像文件烧写访问2009-9-1周朋朔feb12001@163.com30目录zLinux内核z文件系统z制作文件系统z实验2009-9-1周朋朔feb12001@163.com31实验z开发板上完成一下实验zBusybox配置,生成根文件系统zCramfs文件系统生成与使用zYaffs、jffs使用
本文标题:3.嵌入式Linux内核,文件系统
链接地址:https://www.777doc.com/doc-5533796 .html