1TM嵌入式系统第6章嵌入式文件系统2TM22课程大纲文件系统基础知识嵌入式Linux文件系统简介Linux文件系统框架和特性嵌入式文件系统相关实验3TM3操作系统、内核、文件系统操作系统?负责对计算机硬件直接控制及管理的系统软件内核操作系统的核心部分文件系统操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。操作系统中与管理文件有关的软件和数据。屏蔽底层硬件的处理细节,用户可以按名字访问数据4TM4Linux文件系统的特点Linux的文件系统Vs.Windows的文件系统Windows文件系统以驱动器的盘符为基础的每一个目录是与相应的分区对应Linux文件系统一个文件树它的所有文件和外部设备(如硬盘,光驱等)都是以文件的形式挂结在这个文件树上总之,在Windows下,目录结构属于分区;Linux下,分区属于目录结构5TM5Linux的目录结构/mntlibprocsbintmphomeetcusrdevbootvarbingrubrc.dsysconfig...testvbird...cdromfloppy...srcbinsbinlogspoolcache6TM6Linux文件系统中的挂载(mount)实现硬件管理手段和软件目录管理手段的统一每一个分区和某一个目录相对应对目录的操作就是对这个分区的操作把分区和目录对应的过程叫做挂载(mount)这个挂载在文件树中的位置就是挂载点这种对应关系可以由用户随时中断和改变7TM7mount命令功能:加载指定的文件系统语法:mount[-afFhnrvVw][-L标签][-o选项][-t文件系统类型][设备名][加载点]例如:mount-tvfat/dev/hda1/mnt/c8TM8Linux文件的类型Linux对目录和设备都当作文件来进行处理分类普通文件目录文件链接文件设备文件9TM91.普通文件如同Windows中的文件包括文本文件shell脚本二进制的可执行程序各种类型的数据10TM102.目录文件目录也是文件包含文件名和子目录名以及指向那些文件和子目录的指针Linux通过上下链接目录文件系统来实现对整个文件系统的操作什么是根目录?11TM113.链接文件又称软链接,符号链接类似于Windows中的“快捷方式”功能实现对不同的目录、文件系统甚至是不同机器上的文件直接访问,并且不需要重新分配磁盘空间命令格式:ln[-s]source_pathtarget_path例如:ln-shttpd.confhttpd2.conf12TM124.设备文件Linux把设备都当作文件来进行操作与设备相关的文件一般都在/dev目录下块设备文件字符设备文件块设备数据的读写是以块(如由柱面和扇区编址的块)为单位的设备,最简单的如硬盘(/dev/hda1)等字符设备指串行端口等接口设备13TM13Linux中常见的文件系统—EXT2Ext2是GNU/Linux系统中标准的文件系统特点单一文件大小及文件系统本身的容量上限与文件系统本身的簇大小有关一般常见的X86系统中,簇最大为4KB,则单一文件大小上限为2048GB,而文件系统的容量上限为16384GB14TM14Linux常见的文件系统-EXT3Ext3是Ext2的下一代在保有目前Ext2的格式之下再加上日志功能日志文件系统(JournalFileSystem)整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪15TM15Linux常见的文件系统--swap交换空间Linux使用整个分区来作为交换空间Windows使用交换文件自定义大小一般这个SWAP格式的交换分区的容量大小是主内存的2倍16TM1616课程大纲文件系统基础知识嵌入式Linux文件系统简介Linux文件系统框架和特性嵌入式文件系统相关实验17TM17嵌入式文件系统Vs.桌面文件系统专有性Vs.通用性嵌入式系统针对特殊目的而定制嵌入式文件系统要为嵌入式系统的设计目的服务不同用途的嵌入式操作系统下的文件系统不同18TM18嵌入式文件系统的设计目标使用简单方便安全可靠实时响应接口标注的开放性和可移植性可伸缩性可配置性开放的体系结构资源有效性功能完整性热插拔19TM19嵌入式操作系统嵌入式文件系统QNX实时操作系统POSIX,SMB,FAT,CD-ROM.VxWorksFFS,FAT,RTllFS,RAWFS,TAPEFS嵌入式LinuxJFFS2,YAFFS,CRAMFS,ROMFS,RAMFS20TM20桌面文件系统不适合嵌入式系统(Ext2fs)为像IDE设备那样的块设备设计的不太适合扇区大小因设备不同而不同的闪存设备没有提供对基于扇区的擦除/写操作的良好管理闪存具有有限的擦除寿命在出现电源故障时,Ext2fs不是防崩溃的不支持损耗平衡Flash中所有被擦写的单元保持相同的擦写次数,因此缩短了扇区/闪存的寿命在设计块驱动程序方面较为困难21TM21存储设备嵌入式Linux文件系统选择嵌入式文件系统的关键点不同的文件系统类型有不同的特点根据存储设备的硬件特性、系统需求等有不同的应用场合嵌入式设备很少使用大容量的IDE硬盘,往往采用RAM、ROM、FLASH存储器等作为存储设备。设计合适的文件系统22TM22FlashMemory(闪存)NAND串行;顺序读取;适合大容量;通常需MTD存储单元被分为页,由页组成块读写以块和页为单位不足:随机存取速度较慢,无法按字节写适合于大容量的多媒体应用中。NOR并行;随机读取;不足:写入和擦除速度较低适合数据或程序存储;XIPXSbase开发平台上所使用的闪存:IntelStrataFlashMemory28F128J3A,NOR23TM23嵌入式存储设备嵌入式Linux文件系统?NANDFlashYAFFSNORFlashJFFS2RAMRAMFSNetworkNFS24TM24JFFS/JFFS22000年Axis公司发布了日志式Flash文件系统jffs在Flash的存储空间中,数据和辅助信息都依次存放2001年初RedHat公司在此基础上推出了jffs2文件系统针对嵌入式系统中的Flash存储器进行设计25TM25JFFS缺陷关于空间回收,jffs并没有进行太多优化不支持对数据进行压缩之后进行存储不支持硬链接,每一个存储块中都保存了对应的文件名26TM26JFFS2:改进jffs2的节点头部中增加了一些新的信息包括CRC校验码和节点类型等改进jffs空间回收方式的缺陷jffs2不再像jffs中只有一种节点;有3种节点类型分别用于表示擦除块的标记,普通文件,目录可以很快取得的数据并不保存在内存之中增加了对数据的压缩开始支持硬链接27TM27YAFFS/YAFFS2JFFS/JFFS2应用于NANDFlash存在问题通过jffs_node维护Flash中的日志节点每个节点需要占用48个字节的内存空间JFFS/JFFS2在挂载时需要扫描整个Flash的内容找出所有的日志节点,建立文件结构28TM28YAFFSYetAnotherFlashFileSystem专门针对NANDFlash特点编写的日志文件系统克服JFFS/JFFS2的缺点很小的内存空间占用很短的挂载时间跨平台的文件系统29TM29YAFFS2YAFFAS存在的问题不支持数据压缩仅对512字节页(后简称小页)大小的NANDFlash很多大容量的NANDFlash(128MB以上),使用大小为2KB的页(后简称为大页)YAFFS2实现对大页Flash的支持在内存空间占用,垃圾回收速度,读写速度等方面均有大幅度提升30TM30Cramfs最初是LinusTorvalds编写的一个文件系统具有简单、压缩和只读等特点用于保存只读的根文件系统内容特点将文件数据以压缩形式存储,在需要运行的时候进行解压缩不能直接在Flash上运行可以节约很多Flash存储空间,但是文件系统运行需要将大量的数据拷贝进RAM中,造成一定的浪费31TM31创建CRAMFS根文件系统映像工具mkcramfs和cramfsck使用如下命令来制作一个CRAMFS映像${ROOTFS}为目标根文件系统所在目录~$mkcramfs${ROOTFS}/cramfs.img32TM3232课程大纲文件系统基础知识嵌入式Linux文件系统简介Linux文件系统框架和特性嵌入式文件系统相关实验33TM33Linux文件系统与存储设备现代操作系统都提供多种访问存储设备的方法Linux文件系统有两条独立控制设备驱动的途径通过设备驱动的接口直接读写磁盘,但是给操作系统带来麻烦,降低稳定性特殊环境下使用,例如数据库管理系统按“块”访问通过文件管理器接口提高系统稳定性按文件结构来读写34TM34Linux文件系统框架设备驱动磁盘设备API文件API文件管理器设备驱动磁盘POSIX文件APIPOSIX文件APIVFS磁盘独立转换器(a)传统文件系统(b)Linux文件系统35TM35Linux文件系统特点在UNIX操作系统中,文件按照树的形式来组织一个文件系统只有一个根目录根目录挂载(mount)Unix文件系统通过文件管理器的操作以及对文件、目录的定位来控制存储设备Linux文件管理器VFS36TM36目录树虚拟文件系统JFFS2RAMFSMTD字符设备MTD块设备MTD设备驱动RAMNORFlash用户层内核层底层驱动硬件层37TM37VFSLinux内核借鉴了很多“面向对象”的思想虽然Linux内核是用C语言来写面向对象中的概念VFS层对应“抽象基类”具体文件系统对应这个抽象基类的“派生类”对文件的操作实现了一个类似于“纯虚函数”的接口如open,write,read等38TM3838课程大纲文件系统基础知识嵌入式Linux文件系统简介Linux文件系统框架和特性嵌入式文件系统相关实验39TM39文件系统实验一建立JFFS2根文件系统二基于BusyBox构建根文件系统三建立ramfs文件系统四NFS文件系统实验五samba介绍与应用40TM40JFFS2在Linux中的两种使用方式根文件系统普通文件系统在系统启动后被挂载41TM41建立JFFS2根文件系统内核配置映像生成42TM42建立JFFS2文件系统-内核配置GeneralSetup项“root=1f03rwconsole=ttyS0,115200init=/linuxrc”MTD驱动在menuconfig中调用flashmemory设备驱动选择CFIFlashdevicemappedontheXSBASE255PXA255board43TM4344TM44JFFS2文件系统支持项还需要在FileSystem选项中选择[*]JournallingFlashFileSystemv2(JFFS2)support45TM45JFFS2映像生成mkfs.jffs2工具创建成imagemkfs.jffs2用法-e选项确定闪存的擦除扇区大小(通常是64K)-p选项用来在映像的剩余空间用零填充-o选项用于输出文件,这里是rootfs.img利用bootloader将生成的rootfs.img下载后写入flash再次重起开发板,内核就能加载JFFS2作为根文件系统./mkfs.jffs2–orootfs.img–e0x40000–rroot_XSBASE–p-l46TM46二:基于BusyBox构建根文件系统Busybox配置Busybox利用BusyBox制作JFFS2的根文件系统47T