通信原理大综合课件高频全_第1页
通信原理大综合课件高频全_第2页
通信原理大综合课件高频全_第3页
通信原理大综合课件高频全_第4页
通信原理大综合课件高频全_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章嵌入式文件系统

文件系统是Linux操作系统非常重要的一部分,文件系统是管理信息资源的一种软件,管理文件的存储、检索、更新,提供安全可靠的共享和保护手段,并且方便用户使用。它包含两个内容,一是存储信息在逻辑上的信息组织结构,二是存储信息在物理介质上的存储结构。逻辑结构最常见的表现形式是树型结构几乎所有的操作系统都采用这种形式。物理存储介质有磁盘、Flash、存储卡、光盘等。文件系统可以有不同的格式,它决定信息如何被存储为文件和目录。文件系统的功能统一管理文件的存储空间,实施存储空间的分配与回收。实现文件的按名存取。名字空间映射存储空间。实现文件信息的共享,并提供文件的保护和保密措施。向用户提供一个方便使用的接口(提供对文件系统操作命令,以及提供对文件的操作命令:信息存取、加工等)。支持不同类型的文件系统通过文件系统类型注册链表来描述的。向系统注册文件系统类型有两种途径,一是在编译操作系统内核时确定,并在系统初始化时通过函数调用向注册表登记;另一种是把文件系统当作一个模块,通过kerneld或insmod命令在装入该文件系统模块时向注册表登记它的类型。Linux操作系统不通过设备标识访问某个具体文件系统,而是通过mount命令把它安装到整个文件系统树的某一个目录节点,该文件系统的所有文件和子目录就是该目录的文件和子目录,直到用umount命令显式的撤卸该文件系统。当Linux自举时,首先装入根文件系统,然后根据/etc/fstab中的登记项使用mount命令自动逐个安装文件系统。此外用户也可以显式地通过mount和umount命令安装和卸装文件系统。虚拟文件系统VFS

它的主要功能包括:记录可用的文件系统的类型。把设备与对应的文件系统联系起来。处理一些面向文件的通用操作。

虚拟文件系统VFS是物理文件系统与服务之间的一个接口层,它对每一个具体的文件系统的所有细节进行抽象,使得不同的文件系统在Linux核心以及系统中运行的其它进程看来都是相同的。

VFS只是一种存在于内存的文件系统,在操作系统自举时建立,在系统关闭时消亡。VFS描述文件时使用超级块和inode的方式。在系统启动时,所有被初始化的文件系统(file_system_type)都要向VFS(file_systems)登记.

超级块的数据结构如下:structsuper_block{kdev_ts_dev; /*该文件系统的主次设备号*/unsignedlongs_blocksize; /*块大小*/unsignedchars_blocksize_bits; /*以2的幂次表示块大小*/unsignedchars_lock; /*锁定标志,置位表示拒绝其他进程访问*/unsignedchars_rd_only; /*只读标志*/unsignedchars_dirt; /*已修改标志*/structfile_system_type*s_type; /*指向文件系统类型注册表相应项*/structsuper_operations*s_op; /*指向一组操作该文件系统的函数*/structdquot_operations*dq_op;unsignedlongs_flags;unsignedlongs_magic;unsignedlongs_time;structinode*s_covered; /*指向安装点目录的inode*/structinode*s_mounted; /*指向被安装文件系统的第一个inode*/structwait_queue*s_wait; /*在该超级块上的等待队列*/union{各个物理文件系统超级块的结构类型

}u;};

文件系统中的每一个子目录和文件都对应于一个唯一的inode,它是Linux管理文件系统的最基本单位。inode的数据结构如下:structinode{kdev_ti_dev; /*该文件系统的主次设备号*/umode_ti_mode; /*文件类型以及存取权限*/ulink_ti_nlink; /*连接到该文件的link数*/uid_ti_uid; gid_ti_gid; off_ti_size; /*文件长度*/time_ti_atime,

i_mtime,

i_ctime;unsignedlongi_blocksize,

i_blocks; /*字节/块为单位的文件长度*/unsignedlongi_version;unsignedlongi_nrpages; /*文件所占的内存页数*/structsemaphorei_sem;structinode_operations*i_op;/*指向一组针对该文件的操作函数*/structsuper_block*i_sb; /*指向内存中的VFS超级块*/structwait_queue*i_wait; /*在该文件上的等待队列*/structfile_lock*i_flock; /*操作该文件的文件锁链表的首地址*/structvm_area_struct*i_mmap;structpage*i_pages; /*文件所占页面构成的单向链*/structdquot*i_dquot[MAXQUOTAS];structinode*i_next,*i_prev,*i_hash_next,*i_hash_prev,*i_bound_to,*i_bound_by;structinode*i_mount; /*指向下挂文件系统的inode的根目录*/unsignedlongi_count; /*引用计数,0表示空闲*/unsignedshorti_flags;unsignedshorti_writecount;unsignedchari_lock; /*inode的锁定标志*/unsignedchari_dirt; /*已修改标志*/unsignedchari_pipe,

i_sock,

i_seek,

i_update,

i_condemned;union{各个物理文件系统inode的结构类型

}u;};同超级块一样,inode.u用于存储每一个特定文件系统的特定inode。系统所有的inode通过i_prev,i_next连接成双向链表,头指针是first_inode。每个inode通过i_dev和i_ino唯一地对应到某一个设备上的某一个文件或子目录。i_count为0时表明该inode空闲,空闲的inode总是放在first_inode链表的前面,当没有空闲的inode时,VFS会调用函数grow_inodes从系统内核空间申请一个页面,并将该页面分割成若干个空闲inode,加入first_inode链表。文件管理的缓冲机制

Linux既支持多种类型的文件系统,又保持了很高的性能。探究其原因,除了VFS以外,多种复杂的cache起到了关键作用。从效率角度出发,为提高对first_inode链表进行线性搜索的速度,VFS为已经分配的inode构造了cache和hash表。Linux维护了表达路径与inode对应关系的VFSdirectorycache。被访问过的目录将会被存入directorycache,这样当同一目录被再次访问时就可以快速获得。数据结构如下:为加快对物理设备的访问,Linux维护一组数据块缓冲区,称为buffercache。Buffercache就是文件组织中所提到的主存缓冲区,它独立于任何类型的文件系统,被所有的物理设备所共享。非日志文件系统与日志文件系统

文件系统是用来管理和保存数据的,应保证数据的完整性,但有时会发生意外。保存文件之前,系统崩溃。未存盘数据会丢失。正在保存文件时,系统崩溃。严重情况下会使文件系统的的管理信息,目录、分区甚至整个硬盘数据丢失。非日志文件系统通过备份信息来恢复目录结构、分区信息等。日志文件系统通过先写日志后写数据。保存改动记录,在系统重起时自动根据日志记录把尚未完成的文件操作取消,保证文件系统的一致性和完整性。7.1嵌入式文件系统概述一、嵌入式系统的存储介质

嵌入式系统中文件系统常用的有SDRAM,NOR-FLASH,NAND-FLASH,SD卡,U盘和硬盘等,种类比PC机要多。其中SDRAM作为内存,在掉电的情况下,不能保持原有数据不变,所以基于内存的文件系统只能是临时的文件系统,可以用来保存临时的文件,不能用来保存需要永久记录的文件。FLASH是嵌入式系统最常用的文件系统存储介质,有两种类型NOR和NAND,NORFLASH可以直接进行读操作,但写操作要经过擦除和写入两部分,擦除是按块来进行,不能直接写入,需要通过命令控制;应用程序可以直接在Flash内运行,不必读到RAM中。。NANDFLASH即不能直接进行读操作,也不可以直接进行写,读写都是按块来进行,都需要通过命令来做控制,但NAND存储密度高,写入和擦除速度快。NORFlash主要适用于代码存储,NANDFLASH主要适用于数据存储。嵌入式Flash文件系统要求1、掉电安全要求系统掉电和程序崩溃都不会影响文件系统的一致性和完整性。2、平均使用3、高效垃圾回收二、嵌入式Linux文件系统1、嵌入式Linux文件系统原理Linux文件系统主要分成三个层次。一是用户空间的应用程序对文件系统的系统调用,二是虚拟文件系统,三是挂载在VFS中的实际文件系统。MTD(存储技术器件)是Linux内核采纳的一种设备驱动程序,它为底层的存储芯片提供了统一的设备接口MTD驱动也可以为那些支持CFI接口的NOR型Flash提供支持。虽然MTD可以建立在RAM上,但它是专为基于Flash的设备而设计的。MTD包含特定Flash芯片的驱动程序,开发者要选择适合自己系统的Flash芯片驱动。Flash芯片驱动向上层提供读、写、擦除等基本的操作,MTD对这些操作进行封装后向用户层提供MTDchar和MTDblock类型的设备。MTD驱动层也支持在一块Flash上建立多个Flash分区,每一个分区作为了一个MTDblock设备,可以把系统软件和数据等分配到不同的分区上,同时可以在不同的分区采用不用的文件系统格式。这一点非常重要,正是由于这一点才为嵌入式系统多文件系统的建立提供了灵活性。引导块位于文件系统开头,通常为一个扇区,存放引导程序、用于读入并启动操作系统。超级块由于记录文件系统的管理信息,根据特定文件系统的需要超级块中存储的信息不同。inode区用于登记每个文件的目录项,第一个inode是该文件系统的根节点。数据区则存放文件数据或一些管理数据。Linux中,一个文件系统在物理数据组织上一般划分成引导块、超级块、inode区以及数据区。支持不同类型的文件系统通过文件系统类型注册链表来描述的。向系统注册文件系统类型有两种途径,一是在编译操作系统内核时确定,并在系统初始化时通过函数调用向注册表登记;另一种是把文件系统当作一个模块,通过kerneld或insmod命令在装入该文件系统模块时向注册表登记它的类型。当Linux自举时,首先装入根文件系统,然后根据/etc/fstab中的登记项使用mount命令自动逐个安装文件系统。此外用户也可以显式地通过mount和umount命令安装和卸装文件系统。2、主要的嵌入式文件系统(1)Romfs

传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecuteInPlace,片内运行)方式运行,在系统运行时,节省RAM空间。uClinux系统通常采用Romfs文件系统。(2)Cramfs:

Cramfs是一种只读的压缩文件系统。它也基于MTD驱动程序。

在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。

由于以上特性,Cramfs在嵌入式系统中应用广泛。

但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback设备可以把它安装别的文件系统里。(3)jffs2

JFFS文件系统最早是由瑞典AxisCommunications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux,uCLinux中。

Jffs2:日志闪存文件系统版本2(JournallingFlashFileSystemv2)

主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。

(4)yaffs:YetAnotherFlashFileSystem

yaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE,pSOS和ThreadX等。

yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。当然,yaffs也可与MTD驱动程序配合使用。

yaffs与yaffs2的主要区别在于,前者仅支持小页(512Bytes)NAND闪存,后者则可支持大页(2KB)NAND闪存。同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。7.2根文件系统一、概述

Linux的文件系统有一个根节点“/”,这个根节点存在于内存中,系统启动时,要将一个具体的设备安装到节点“/”上,称为根设备,根设备上的文件系统就称为根文件系统。

对于PC机根设备一般是硬盘上的一个分区,对嵌入式设备,通常是Flash上的一个分区。二、根文件系统的目录根文件系统要包括下列目录:/bin常用的执行程序,包括引导启动的命令,用户可能用到的命令。这些命令都是二进制文件的可执行程序。/etc存放系统的设置文件和其它的系统文件。其中包括用户信息文件etc/passwd,系统初始化文件/etc/rc等。/sbin系统管理员服务程序,其中最重要的是供内核初始化之后执行的/sbin/init进程,系统启动时由init解释并运行/etc/inittab,inittab将指导int去调用一个系统初始化程序/etc/init.d/rcS。

/proc系统状态文件目录,目录中的文件可以用于访问有关内核的状态、计算机的属性、正在运行的进程的状态等信息。/proc中的文件是虚拟的,有内核在内存中产生。

/tmp存放程序在运行时产生的信息和数据。/dev设备文件,驱动程序存放目录,可以在这里存放自己编写的驱动程序。/usr用于存放用户程序和配置文件的目录,可以根据需要进行设置。目录下的/usr/etc/rc.local执行本地所需要的初始化,如安装核心模块,进行网络,运行应用程序,启动图形界面等。/etc/modules.conf在系统运行期间自动加载模块。

/var包含系统在运行时要改变的数据。/root超级用户的目录。/lib根文件系统上的程序所需的共享库,存放根文件系统运行时所需的共享文件。/mnt用于设备安装的目录。/mnt/etc/init.d/rcS完成各个文件系统的Mount,执行/usr/etc/rc.local;通过rcS可以调动dhcp程序配置网络。rcS执行完以后,就会打开Shell。

二、根文件系统的制作1、Busybox工具的使用Busybox是一种开源软件,集成了一百多个最常用的Linux命令和一些工具,用户可以非常方便的在Busybox中定制所需的应用程序,使用Busybox可以大大简化制作嵌入根文件系统的过程。2、制作根文件系统(1)下载Busybox

下载后解压到本地的任意目录下(如/home/hgs/busybox)新建根文件目录(如/home/hgs/rootfs).进入/home/hgs/busybox目录,运行makemenuconfig打开编译界面进行配置。以下选项是必须编译进Busybox的功能选项:Buildoptions[*]BuildBusyBoxasastaticbinary(nosharedlibs)

这个选项是一定要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才独立于其他函数库.否则必需要其他库文件才能运行,在单一个linux内核不能使他正常工作.

[*]DoyouwanttobuildBusyBoxwithaCrossCompiler选择自己定义的交叉编译环境。InstallationOptions[*]Don'tuse/usr

这个选项也一定要选,否则makeinstall后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令.选择这个选项后,makeinstall后会在busybox目录下生成一个叫_install的目录,里面有busybox和指向他的链接.

其他选项都是一些linux基本命令选项,自己需要哪些命令就编译进去,一般用默认的就可以了.配置好后退出并保存.

(2)编译和安装Busybox执行如下命令:#cd/home/hgs/busybox#make

#makeinstall

Busybox编译后会在_install目录中建立/usr、/bin、/sbin等目录。将_install目录内容复制到/home/hgs/rootfs目录下,作为根文件系统内容。(3)创建顶层目录#cd/home/hgs/rootfs#mkdirdev#mkdiretc#mkdirlib#mkdirproc#mkdirsys#mkdirtmp(4)创建设备节点为系统中的设备在/dev目录下建立设备文件节点。#cd/home/hgs/rootfs/dev#mknodconsolec51#mknodnullc13#mknodzeroc15(5)添加库文件和其它程序如果busybox采用了动态链接的方式编译,还需要把busybox所需要的动态库:libcrypt.so.1、libc.so.6、ldlinux.so.2放到lib目录中。最好按照标准的方式建立相应的文件和链接,可以参考下面的列表:-rwxrwxrwx192519ld-2.3.2.so

l

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论