《嵌入式开发平台》-模块四:嵌入式文件系统_第1页
《嵌入式开发平台》-模块四:嵌入式文件系统_第2页
《嵌入式开发平台》-模块四:嵌入式文件系统_第3页
《嵌入式开发平台》-模块四:嵌入式文件系统_第4页
《嵌入式开发平台》-模块四:嵌入式文件系统_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

任务1:文件系统子任务1:文件文件:是文件描述符,存放打开的文件与进程之间进程交互的有关信息的对象,此对象仅当进程访问文件期间存在于内存中。文件是一个抽象概念,它是存放数据和信息的仓库。文件的载体通常是磁盘。子任务2:文件系统文件系统是磁盘文件的管理系统,根据用户提供的逻辑地址(路径和文件名)查找文件的物理地址。下一页返回任务1:文件系统它是包括了所有磁盘分区、目录、存储设备和文件的一个集合体。功能:(1)用户通过文件系统可直接与操作系统交互,是操作系统的一部分,负责即时检索、读写、操作等。(2)文件的即时存储、访问数据和程序。Linux支持的文件系统:安装Linux可默认选择ext3\reiserfs\ext2文件系统,除此之外,还支持苹果的HFS,也支持其他UNIX操作系统的文件系统,比如:XFS、JFS、minixfs、UFS,也支持Windows文件系统NTFS和FAT,还支持网络文件系统NFS。上一页下一页返回任务1:文件系统子任务3:文件管理操作系统会维护一个显示所有文件在硬盘中的起始扇区信息的表(这个表本身也在硬盘中)。该表只需要存储给定文件的起始扇区信息的原因是,该文件的不同扇区能够通过“linked-list”的方式链接起来,换句话说,在一个文件起始扇区的最末部分,OS会存储关于开始跟踪和下一部分文件扇区的信息。操作系统也会维护一张关于未用扇区的表。当用户新创建一个文件时,OS会核查这张表以找到一个位置安放该文件,当然,接下来OS会更新该表。如果用户删除一个文件,OS会同时更新上面两张表,首先删除在第一张表中该文件的入口信息,然后将这个文件占用的空间信息写入第二张表中。上一页下一页返回任务1:文件系统文件的创建和删除动作贯穿于整个设备使用过程中,对未用扇区的设置就像是干一件东拼西凑的活儿一样,因为这些未用的扇区任意散落在硬盘中。这对性能有写负面影响,特别是在查询时。因此很多OS中都有类似的碎片整理工具,这些工具用来重新排列硬盘中文件的位置,使得硬盘上每个独立文件的扇区能够彼此靠近。上一页返回任务2:ext2文件系统子任务1:磁盘的空间结构磁盘会划分成多个分区,每个分区必须先格式化成某种格式的文件系统,然后才能存储文件。格式化时会在磁盘上写一些管理存储布局的信息。将一个磁盘格式化为ext2文件系统后的空间结构如图4-1所示。1.引导块引导块是由PC标准规定的,用来存储磁盘分区信息和启动信息。任何文件系统都不能使用引导块,引导块之后才是ext2文件系统的开始。ext2文件系统将整个分区划分成若干同样大小的块组。下一页返回任务2:ext2文件系统2.超级块描述整个分区的文件系统信息,例如块大小、文件系统版本号、上次mount的时间等。超级块在每个块组的开头都有一份。3.块组描述符表由很多块组描述符表组成,每个块组描述符存储一个块组的描述信息。与超级块一样,每个块组有一份拷贝,一旦损坏,就会丢失整个分区的数据。通常内核只用到第0个块组中的拷贝。4.块位图用来描述整个块组中哪些块已用,哪些块空闲。它本身占一个块,其中每个位代表本块组中的一个块,这个位为1表示该块已用,为0表示该块空闲可有。上一页下一页返回任务2:ext2文件系统5.索引节点位图与块位图类似,本身占一个块,其中每个位表示一个节点是否空闲可用。6.索引节点表存储文件的描述信息。比如,当使用ls-l命令时,所看到的文件的详细信息,其中每一个文件都有一个节点,一个块组中的所有节点组成节点表。mke2fs格式化工具的默认策略是一个块组有多少个8KB就分配多少个节点。上一页下一页返回任务2:ext2文件系统7.数据块根据不同的文件类型有不同的情况。常规文件,文件的数据存储在数据块中;目录文件,该目录下的所有文件名和目录名存储在数据块中,注意文件名保存在它所在目录的数据块中,除文件名外,ls-l命令看到的其他信息都保存在该文件的节点中;软链接文件,如果目标路径名短则直接保存在节点中以便更快地查找,如果路径长则分配一个数据块来保存;设备文件、FIFO和socket等特殊文件没有数据块,设备文件的主设备号和次设备号保存在节点中。上一页下一页返回任务2:ext2文件系统子任务2:数据块寻址如果一个文件有多个数据块,这些数据块很可能不是连续存放的,如何寻址到每个块呢,根目录的数据块是通过其节点中的索引项找到的,事实上,这样的索引项一共有15个,从Blocks[0]到Blocks[14],每个索引项占4字节。如果Blocks[0]保存着24,就表示第24个块是该文件的数据块,前12个索引项都表示块编号,后三个索引项都是间接索引。索引项Blocks[12]所指抽的块并非数据块,而是称为间接寻址块,其中存放类似Blocks[0]这种索引项,再由索引项指向数据块。设块大小是b,那么一个间接寻址块中可以存放b/4个索引项,指向b/4个数据块。对于块大小是1KB的情况,最大可表示268KB的文件。上一页下一页返回任务2:ext2文件系统索引项Blocks[13]指向两级的间接寻址块,最多可表示(b/4)2+(b/4)+12个数据块。对于1KB的块大小,最大可表示64.26MB的文件。索引项Blocks[14]指向三级的间接寻址块,最多可表示(b/4)3+(b/4)2+(b/4)+12个数据块。对于1KB的块大小,最大可表示16.06GB的文件。可见,这种寻址方式对于访问不超过12个数据块的小文件是非常快的,访问文件中任意数据只需要两次读盘操作,一次读索引项,一次读数据块;而访问大文件中的数据则需要最多五次读盘操作:索引项、一级间接寻址块、二级间接寻址块、三级间接寻址块、数据块。实际上,磁盘中的索引项和数据块往往已经被内核缓存了,读大文件的效率也不会太低。上一页下一页返回任务2:ext2文件系统子任务3:文件和目录操作的系统函数一、stat(2)该函数读取文件的索引节点,然后把索引节点的各种文件属性填入一个structstat结构体传出给调用者。stat需要根据传入的文件路径找到索引节点,假设一个路径是/opt/file,则查找顺序是:(1)读出索引节点表中第2项,也就是根目录的索引节点,从中找出根目录数据块的位置。(2)从根目录的数据块中找出文件名为opt的记录,从记录中读出它的索引节点号。(3)读出opt目录的索引节点号,从中找出它的数据块的位置。上一页下一页返回任务2:ext2文件系统(4)从opt目录的数据块中找出文件名为file的记录,从记录中读出它的索引节点号。(5)读出file文件索引节点。二、access(2)该函数功能为检查执行当前进程的用户是否有权限访问某个文件、传入文件路径是什么和要执行的访问操作是怎样的(也就是rwx的权限),取出文件索引节点中的st_mode字段,比较一下访问权限。三、chmod(2)该函数改变文件的访问权限,也就是修改索引节点中的st_mode字段。上一页下一页返回任务2:ext2文件系统四、chown(2)该函数改变文件的所有者和组,也就是修改索引节点中的User和Group字段。五、link(2)该函数创建硬链接,其原理是在目录的数据块中添加一条新记录,其中索引节点号字段和原文件相同。六、symlink(2)该函数创建符号链接,这需要创建一个新的索引节点,其中st_mode字段的文件类型是符号链接,原文件的路径保存在索引节点中或者分配一个数据块来保存。上一页下一页返回任务2:ext2文件系统七、mkdir(2)该函数创建新的目录,要做的操作是在它的父目录数据块中添加一条记录,然后分配新的索引节点和数据块,其中st_mode字段的文件类型是目录,在数据块中填两个记录。八、rmdir(2)该函数删除一个目录,这个目录必须是空的才能删除,要做的操作是释放它的索引节点和数据块,清除索引节点位图和块位图中相应的位,清除父目录数据块中的记录。上一页下一页返回任务2:ext2文件系统九、opendir(3)/readdir(3)/closedir(3)用于遍历目录数据块中的记录。Opendir打开一个目录,返回一个DIR*指针代表这个目录,它是一个类似FILE*指针的句柄。closedir用于关闭这个句柄,把DIR*指针传给readdir读取目录数据块中的记录。每次返回一个指向structdirent的指针,反复读就可以遍历所有记录,所有记录遍历完之后,readdir返回NULL。上一页下一页返回任务2:ext2文件系统结构体structdirent定义如下:ino_td_ino;/*inodenumber*/off_td_off;/*offsettothenextdirent*/unsignedshortd_reclen;/*lengthofthisrecord*/unsignedchard_type;/*typeoffile*/chard_name[256];/*filename*/};上一页下一页返回任务2:ext2文件系统子任务4:虚拟文件系统VFS为了在不同文件系统之间可以方便地交换数据和管理,支持任意地挂载不同现代操作系统,大多都在系统内核和文件系统之间提供一个叫作虚拟文件系统VFS的标准接口。(1)Linux虚拟文件系统是各逻辑文件系统的管理者。(2)Linux虚拟文件系统是一组内核函数,是用户程序的系统调用接口或操作界面。上一页返回任务3:嵌入式文件系统一、设计原则(1)使用便捷。(2)安全性、可靠性高。(3)及时响应。(4)开放的体系结构:开放性、可移植性。二、嵌入式系统中的数据存储和管理嵌入式系统的存储器是常用的FLASH。FLASH分为:(1)NORFLASH,一般小于为16MB,文件系统通常是JFFS(日志闪存文件系统)。(2)NANDFLASH,一般大于为16MB,文件系统通常是YAFFS文件系统。下一页返回任务3:嵌入式文件系统三、YAFFS文件系统类似于JFFS/JFFS2,是专门为NAND闪存设计的嵌入式文件系统,适用于大容量的存储设备,是日志结构的文件系统,提供了损耗平衡和掉电保护,可以有效避免意外掉电对文件系统一致性和完整性的影响。YAFFS是按层次结构设计的,分为文件系统管理层接口、YAFFS内部实现层和NAND接口层,简化了其他系统的接口设计,可以方便地集成到系统中。1.YAFFS文件组织结构将文件组织成固定大小(512B)的数据段,每个文件都有一个页面专门存放文件头。上一页下一页返回任务3:嵌入式文件系统2.YAFFS物理数据组织YAFFS利用NAND闪存提供的每个页面16B的备用空间,备用空间中6B被用作页面数据的ECC(ErrorCorrectionCode),2B用作块状态字和数据状态字,其余8B用来存放文件系统的组织信息,即元数据。3.YAFFS擦除块和页面分配用数据结构来描述每个擦除块的状态。该数据结构记录了块状态,并用一个32bit的位图来表示块内各个页面的使用情况。4.YAFFS垃圾收集机制使用一种多策略混合的算法来进行垃圾回收,将贪心策略和随机选择策略按一定比例混合使用:当满足特定的小概率条件时,垃圾回收器会试图随机选择一个可回收的页面;而在其他情况下,则使用贪心策略回收“赃”块。上一页返回任务4:构建Linux根文件系统子任务1:Linux根文件系统包含的内容内核启动的最后一步:挂载根文件系统。包含内容:(1)init进程。(2)Shell。(3)文件系统、网络系统等的工具集。(4)系统配置文件。(5)链接库。下一页返回任务4:构建Linux根文件系统子任务2:Linux根文件系统的目录结构bin:必要的用户命令(二进制文件)。sbin:必要的系统管理员命令。dev:设备文件及其他特殊文件;当配置内核支持设备文件系统devfs时,此目录中的设备节点由内核和驱动程序自动创建。etc:系统配置文件,包括fstab挂载文件系统的配置文件;passwd为Password文件;inetd.confInetd守护进程的配置文件;group为Group文件;init.d/rcS为缺省的sysinit脚本。lib:glibc链接库,存放系统必要的动态链接库,支持系统的正常启动。上一页下一页返回任务4:构建Linux根文件系统mnt:临时挂载的文件系统的挂载点。proc:提供内核和进程信息。tmp:临时文件目录。usr:多数用户使用的应用程序和目录。var:监控程序和工具程序存放的可变数据。*boot:引导加载程序的静态文件。*home:用户主目录。*opt:附加软件的安装目录。*root:root管理员主目录。*嵌入式Linux可选的目录。上一页下一页返回任务4:构建Linux根文件系统子任务3:BusyBox工具集BusyBox在嵌入式Linux中有“瑞士军刀”,是一个很小的应用软件,但提供完整的工具集。免费下载网址:http://www.busybox.net。BusyBox配置和交叉编译步骤:步骤1:下载BusyBox文件,比如busy-box.tar.bz2。在网址中找到BusyBox文件,比如busy-box.tar.bz2进行下载。上一页下一页返回任务4:构建Linux根文件系统步骤2:解压该压缩文件。使用命令tarxvfjbusy-box.tar.bz2解压缩该文件。步骤3:进入解压目录。使用命令cdbusy-box进入解压目录。步骤4:进行配置,选择配置菜单。使用makemenuconfig命令进入配置界面,选择菜单进行配置。配置菜单界面如图4-2所示。上一页下一页返回任务4:构建Linux根文件系统5.选择BusyBox的编译方式BuildoptionsBuildBusyBoxasastaticbinary(nosharedlibs)缺省配置为使用链接库。6.配置交叉编译器BuildOptions[*]DoyouwanttobuildBusyBoxwithacrosscompile?(/usr/local/arm/3.4.1/bin/arm-linux-)上一页下一页返回任务4:构建Linux根文件系统7.配置安装路径(./_install)BusyBoxinstallationprefix8.配置其他工具集

InitUtilities[*]init[*]supportreadinganinittabfile[*]supportrunniginitfromwithinaninitrd?编译后会生成/bin、/linuxrcbin/busybox、/sbin目录。上一页下一页返回任务4:构建Linux根文件系统

ArchivalUtilities工具:tar、zip、unzip

Coreutils常用命令:basenamecatchgrpchmoddatedddfechoenvlnlsmkdirmknodmvpwdrmrmdirsleepsortsyncwcwhoami等

Editors编辑命令:viawksed等

FindingUtilities上一页下一页返回任务4:构建Linux根文件系统查找命令:findgrepxargsLogin/PasswordManagementUtilitiesLogin:gettyloginpasswd

NetworkingUtilities网络命令集:hostnameifconfiginetdnetstatpingroute

ProcessUtilities进程命令:freepssysctltop

Shellsshell工具:ash等上一页下一页返回任务4:构建Linux根文件系统

SystemLoggingUtilities日志工具:syslogdklogd

LinuxSystemUtilities系统工具:dmesgfdiskgetoptmoremountumountLogin/PasswordManagementUtilitiesLogin:gettyloginpasswd

NetworkingUtilities网络命令集:hostnameifconfiginetdnetstatpingroute上一页下一页返回任务4:构建Linux根文件系统

ProcessUtilities进程命令:freepssysctltop

Shellss

温馨提示

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

评论

0/150

提交评论