嵌入式linux根文件系统的建立.

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

嵌入式linux根文件系统的建立8.1文件系统简介Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(VirtualFileSystem,为各类文件系统提供一个统一的操作界面和应用编程接口。Linux下的文件系统结构如下:Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。之后可以自动或手动挂载其他的文件系统。因此,一个系统中可以同时存在不同的文件系统。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM和ROM(常采用FLASH存储器,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。8.2嵌入式Linux根文件系统8.2.1根文件系统简介简单的来说,根文件系统就是一种目录结构,那么根文件系统和普通的文件系统有什么区呢?其实根文件系统就是要包括Linux启动时所必须的目录和关键性的文件,例如Linux启动时都需要有init目录下的相关文件,在Linux挂载分区时Linux一定会找/etc/fstab这个挂载文件等,根文件系统中还包括了许多的应用程序bin目录等,任何包括这些Linux系统启动所必须的文件都可以成为根文件系统。8.2.2基本根文件系统目录构成解析下面列出了linux根文件系统下一些主要目录的功用。/bin二进制可执行命令/dev设备特殊文件/etc系统管理和配置文件/etc/rc.d启动的配置文件和脚本/home用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示/lib标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件/sbin系统管理命令,这里存放的是系统管理员使用的管理程序/tmp公用的临时文件存储点/root系统管理员的主目录(呵呵,特权阶级)/mnt系统提供这个目录是让用户临时挂载其他的文件系统。/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里/proc虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。/var某些大文件的溢出区,比方说各种服务的日志文件/usr最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中主要包含:/usr/bin众多的应用程序/usr/sbin超级用户的一些管理程序8.3根文件系统的引导过程一般的系统先启动的是/sbin/init,而如同原始的主流init,BusyBox也可以处理系统的启动工作。BusyBox的init尤其适合在嵌入式系统中使用,因为它可以为嵌入式系统提供所需要的大部分init功能,却不会让嵌入式系统被SystemVinit的额外特性拖累。因为/sbin/init是/bin/busybox的符号链接,所以BusyBox是目标板系统上执行的第一应用程序。当BusyBox知道调用它的目的是要执行init,它会立即跳转到init进程。BusyBox的init进程会依次进行以下工作:1、为init设置信号处理进程。2、初始化控制台。3、剖析inittab文件、/etc/inittab文件。4、执行系统初始化的命令行。BusyBox在缺省情况下会使用/etc/init.d/rcS命令行。5、执行所有会导致init暂停的inittab命令。6、执行所有仅执行一次的inittab命令。一旦完成以上工作,init进程便会循环执行以下工作:1、执行所有终止时必须重新启动的inittab命令。2、执行所有终止时必须重新启动但启动前必须先询问过用户的inittab命令。8.4嵌入式文件系统8.4.1嵌入式文件系统的特点和种类文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。linux文件系统使用索引节点来记录文件信息,作用像windows的文件分配表。索引节点是一个结构,它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号。linux文件系统将文件索引节点号和文件名同时保存在目录中。所以,目录只是将文件的名称和它的索引节点号结合在一起的一张表,目录中每一对文件名称和索引节点号称为一个连接。对于一个文件来说有唯一的索引节点号与之对应,对于一个索引节点号,却可以有多个文件名与之对应。因此,在磁盘上的同一个文件可以通过不同的路径去访问它。可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容。连接有软连接和硬连接之分,软连接又叫符号连接。不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。在嵌入式Linux应用中,主要的存储设备为RAM(DRAM,SDRAM和ROM(常采用FLASH存储器,常用的基于存储设备的文件系统类型包括:jffs2,yaffs,cramfs,romfs,ramdisk,ramfs/tmpfs等。8.4.2常见的嵌入式文件系统1、基于FLASH的文件系统Flash(闪存作为嵌入式系统的主要存储媒介,有其自身的特性。Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1,因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block为单位进行的。闪存主要有NOR和NAND两种技术(简单比较见附录。Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。在嵌入式Linux下,MTD(MemoryTechnologyDevice,存储技术设备为底层硬件(闪存和上层(文件系统之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD驱动层的(参见上面的Linux下的文件系统结构图。使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。即文件系统是针对于存储器分区而言的,而非存储芯片。(1jffs2JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。Jffs2:日志闪存文件系统版本2(JournallingFlashFileSystemv2主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。目前jffs3正在开发中。关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。(2yaffs:YetAnotherFlashFileSystemyaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩,所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。yaffs与yaffs2的主要区别在于,前者仅支持小页(512BytesNAND闪存,后者则可支持大页(2KBNAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。(3Cramfs:CompressedROMFileSystemCramfs是Linux的创始人LinusTorvalds参与开发的一种只读的压缩文件系统。它也基于MTD驱动程序。在cramfs文件系统中,每一页(4KB被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。由于以上特性,Cramfs在嵌入式系统中应用广泛。但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装别的文件系统里。(4Romfs传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecuteInPlace,片内运行方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA,Smartphone,数码相机等的SD卡,这主要是为了更好的与最流行的Windows桌面操作系统相兼容。ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。2、基于RAM的文件系统(1RamdiskRamdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统通过Ramdisk放在内存中,可以明显地提高系统的性能。在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。(2ramfs/tmpfsRamfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,VFS本质上可看成一种内存文件系统

1 / 48
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功