




已阅读5页,还剩51页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7讲嵌入式文件系统 主要内容 7 1文件系统结构7 2文件系统类型7 3文件系统目录结构7 4简单编程事例 7 1文件系统结构 Linux透明的支持许多不同的文件系统 将各种安装的文件和文件系统以一个完整的虚拟文件系统的形式呈现给用户 将文件系统的操作和管理纳入统一的框架当中来 使得内核的文件系统接口 如同标准的的文件系统 总线 让用户通过同一组系统调用来管理和操作不同类型文件系统上的文件 这个统一的 抽象的 虚拟的文件系统接口 被称为VFS virtualFileSystemSwitch 主要包含一组标准的文件操作接口 VFS与具体文件系统的关系如图7 1所示 7 1文件系统结构 简介 图7 1VFS与具体文件系统的关系 用户程序 进程 VFS minix FAT 设备文件 Ext2 文件系统操作的系统调用界面 包括read write open close 等 函数sys read sys write sys open 等 通过file结构中的f op指针实现的 文件系统总线 用户空间 系统空间 目前Linux系统支持的文件系统 用户访问磁盘文件系统时 对于目录树下的访问 最终将转换成对这一部分物理磁盘的访问对于设备文件的访问 最终将转换成对于对于驱动程序的访问 7 1文件系统结构 文件访问 对于其他特殊文件的访问 一般是在Linux的内存数据结构中完成的 图7 2Linux文件系统层次图 7 2文件系统类型 romfs文件系统 虚拟ramdisk JFFS文件系统 有网络设备的系统 使用NFS文件系统 在uClinux的系统中 一般内存的容量比较小外存只配置小容量的FLASH 在uClinux中 常用的文件系统有 7 2 1romfs文件系统 简介romfs romfilesystem 是一种只读文件系统 系统的管理代码占用的空间比较小 系统创建romfs文件系统需要使用genromfs工具 值得注意的是 romfs的文件访问权限和属主这些信息尚未完全实现 由于romfs文件系统是只读的 所以可以做得很小 从而节省空间 如果要进行写操作 只能在编译的时候加上写访问功能 或者在运行时另外生成一个RAMdisk送暂存数据 romfs文件系统结构 7 2 1romfs文件系统 romfs文件系统是为了对块设备进行高效管理而开发的 所有的romfs文件 经过genromfs程序生成之后 合并到一个文件 即romfs的映象文件 中去 只需要采用mount命令将这个文件挂接到任何一个目录下 就可以对romfs中的文件以正常方式进行访问了 romfs映像文件的文件组织方式如表7 1所示 16volumename 12 16cheeksum 8 12fullsize FS 4 81 ROM 0 4 内容 偏移量 fileheaders 表7 1romfs映像文件头部结构 romfs映像文件开始的8个字节存放了ASCII码 ROM1FS 后面存放了这个文件系统的字节数 checksum存放从文件头开始的512个字节的校验码 然后是文件系统的卷标名称 该名称以ASCII值为0的字符结尾 所占用的空间为16字节的整数倍 后面存放各个文件 fileheaders 的头部结构如表7 2所示 7 2 1romfs文件系统 表7 2romfs中的文件头 fileheaders 结构 16filename 校验 12 16cheeksum 8 12size 4 8sepc info 距离下一个文件头的说明量 0 4nextfileheader 内容说明 偏移量 filedata 该文件大小 单位B 文件数据 文件名 大小为16整数倍 目录硬连接和设备文件信息 spec info域主要有如下几种情况 0 硬链接 spec info域的内容用于链接的目标文件1 目录 spec info域的内容为第一个文件的文件头2 普通文件 spec info域的内容无效 应设置为03 符号链接 spec info域的内容无效 应设置为0 7 2 1romfs文件系统 4 块设备 spec info域内容为各16bit的主 从设备号5 字符设备 spec info域的内容无效 设置为06 网络socket套接字spec info域的内容无效 设置为07 fifo管道文件 spec info域的内容无效 设置为0 7 2 1romfs文件系统 注意 romfs文件系统为了减小module的大小省略了很多完整性检测的代码 如 不要生成硬链接循环 要为当前目录和父目录生成 和 链接 7 2 1romfs文件系统 romfs的制作过程如图7 3所示 在主机的 romfs目录下生成需要的目录结构 将romfs img作为初始化数据连接到linux内核当中 系统启动时读取romfs文件系统中的数据 使用工具将 romfs目录转换为 romfs的组织结构 romfs img 将romfs img作为初始化数据连接到Linux内核当中 使用romfs的文件系统的时 可采用mount命令直接将其挂接到合适的目录下 例如 假设 dev ram0是romfs文件系统的设备 mount tromfs dev rom0 var 7 2 1romfs文件系统 这样把 dev ram0挂接到 var目录上去 此后直接对 var目录进行操作即可 但romfs映射到内存中 仍旧无法支持动态擦写保存 如需要动态保存数据可以采用虚拟ramdisk或JFFS进行处理 7 2 2ramfs文件系统 ramdisk是使用RAM虚拟的磁盘 该驱动程序在 linux drivers block rd c 是一个作为盘分区使用的内存块 或者说将内存模拟为硬盘空间 使用ramdisk可以提高访问速度 若已知某个文件将被高频率访问 通过将文件存放在内存里就可以提高性能 通过加载EXT2文件系统来管理和操作文件 Ramdisk简介 使用ramdisk ramdisk的配置项是 config config文件中的CONFIG USER RAMIMAGE RAMFS128 128K ramdisk的加载过程 1 将预先生成的EXT2的磁盘映像压缩格式释放到块设备2 使用mount命令将ram块设备中的文件系统安装到根文件系统的 var下 3 可以对ramdisk进行文件操作了 bin expand etc ramfs img dev ram0mount text2 dev ram0 var 7 2 2ramfs文件系统 7 2 3JFFS与JFFS2文件系统 ramdisk是运行在内存中的 所以在系统掉电后 所有保存的数据都会丢失 这时 一个比较好的选择是JFFS文件系统 最新的版本是JFFS2 JFFS文件系统一般使用FLASH作为磁盘 所以在掉电后数据不会丢失 而且 JFFS可以对由于在掉电时刻操作导致的不完整数据进行修复 JFFS存储格式JFFS是一个日志结构的文件系统 只有一种文件节点 它通过jffs raw inode这个结构进行描述 每个这样的节点都关联到某个文件上 其中包含了一个简单的头部 辅助信息以及存储的数据 存储的辅助信息包括通常所记录的文件inode信息 如uid gid等 及所关联的文件名 7 2 3JFFS与JFFS2文件系统 JFFS 注意 由于在JFFS中 大的文件都分为很多节点存放 所以除了存放数据外 还要额外保存数据在文件中的偏移量 设备文件节点和符号链接等特殊的文件只需要占用很小的空间 删除文件时 在辅助信息存放的地方设置一个已删除标记 被删除文件的Flash块都会加上这个已删除标记 在该文件的文件句柄释放后 这些节点就成为废弃节点了 更新文件的时 新的文件存放的节点会添加到所有已经使用的存储空间的末尾 旧版本的文件也会被废弃 等待在回收空间的时候重新分配利用 7 2 3JFFS与JFFS2文件系统 文件系统操作的实施过程 7 2 3JFFS与JFFS2文件系统 挂接挂接JFFS文件系统时 会把整个存储设备扫描一次 每个存储块都读取一次 然后根据所有节点中存储的信息来生成一个文件系统的目录树 同时也自动生成了一个文件在Flash中物理存储位置的对应表 用来进行文件的寻址操作 读取文件目录结构可以通过mount时生成的信息获得 cd和rmdir等目录操作都可以直接根据这些信息来确定如何操作 读取文件时 利用mount时生成的物理地址将指定的内容读入到缓存区中 7 2 3JFFS与JFFS2文件系统 改变属性例如改变文件的属主 chown命令 和操作权限 chmod命令 等操作 只需要将一个记录新的信息的节点写到Flash已利用的存储空间的末尾 然后将旧节点标记为废弃节点即可 7 2 3JFFS与JFFS2文件系统 写文件等操作也与此类似 并不是通过直接改写旧节点来完成的 空间回收 7 2 3JFFS与JFFS2文件系统 JFFS的文件系统操作使占用的存储块增多 当所有存储块都被占用后 文件系统开始对废弃的存储块进行回收利用 注意 如果发现所有回收空间加起来仍不足以满足当前操作的需求 则系统不能继续当前的操 同时 系统也自动从所有存储块中的第一个开始进行分析 不断将废弃的节点回收 将尚在使用的节点进行合并 最终合成出整个的 块废弃的Flash存储块 这样就可以将这一整块存储块的内容一次性擦除 成为新的空闲块 7 2 3JFFS与JFFS2文件系统 缺陷 对空间回收 JFFS并没有进行太多优化 效率不高 它是按照顺序 从第一个数据块开始腾出空间 如果第一块写满了有效数据 它也会将这些数据后移 腾出第一块来作为空闲块 但这种方式保证了Flash的每一块都可以得到相同的擦写次数 有利于提高整个Flash设备的使用寿命 7 2 3JFFS与JFFS2文件系统 JFFS不支持对数据进行压缩之后存储 而在嵌入式系统中 如果数据可以得到最大限度的压缩 可以提高资源的利用率 提高性能 节省成本 不支持硬链接 每一个存储块中都保存了对应的文件名 这样 就算是很常用的改名操作 也需要增加一个新的需要保存全部所需数据的存储块进行存储 7 2 3JFFS与JFFS2文件系统 JFFS2的节点头部中增加了一些新的信息 包括CRC校验码和节点类型等 由于JFFS空间回收方式的缺陷 在JFFS2中 所有的存储节点都不可以跨越Flash的块界限了 7 2 3JFFS与JFFS2文件系统 JFFS2的主要改进 这样 就可以在回收空间的时候 按照Flash的各个块为单位 进行选择 将最合适的块腾出来 擦除之后作为新的空闲块 提高效率与利用率 JFFS2有3种节点类型 分别用于表示擦除块的标记 普通文件 目录 第一种是在Flash擦除了一块之后建立的 用于表明Flash的块擦除工作完成 文件系统的信息可以很快取得数据并不保存在内存之中 从而可以提高内存的利用率 增加了对数据的压缩 开始支持硬链接 7 2 3JFFS与JFFS2文件系统 JFFS文件系统的结构 7 2 3JFFS与JFFS2文件系统 MTD是内存技术设备子系统 负责操作和管理FLASH和RAM物理器件 可以自动识别该器件 还支持将一块FLASH器件分为不同的分区管理 这样可以将Linux内核和根文件系统分别存在不同的分区 避免由于FLASH擦写和文件系统组织结构的相互影响 MTD向JFFS提供了字符型和块设备 对于需要无延时的写入使用字符设备 如Linux内核的升级 块设备为JFFS文件系统服务 在加载JFFS文件系统后 可以操作和管理文件 7 2 3JFFS与JFFS2文件系统 文件系统组成每个文件系统由逻辑块的序列组成 一个逻辑盘空间一般划分引导块 超级块 inode区以及数据区等四部分 7 2 4EXT2文件系统 EXT2文件系统是Linux中主流的文件系统 在Linux中 普通文件和目录文件保存在称为块物理设备的磁盘或者磁带上 一套Linux系统支持若干物理盘 每个物理盘可定义一个或者多个文件系统 引导块 在文件系统的开头 通常为一个扇区 存放引导程序 用于读入并启动操作系统 超级块 superblock 用于记录文件系统的管理信息 特定的文件系统定义了特定超级块 inode区 索引节点 一个文件 或目录 占据一个索引节点 利用根节点 首个索引节点 可以把一个文件系统挂在另一个文件系统的非叶节点上 数据区 用于存放文件数据或者管理数据 如一级间址块 二级间址块等 7 2 4EXT2文件系统 EXT2是Linux中的一个可扩展的文件系统 通过VFS的超级块 structext2 sb infoext2 sb 可以访问EXT2的超级块 通过VFS的inode stuctext2 inode infoext2 i 可以访问EXT2的inode 7 2 4EXT2文件系统 访问EXT2 文件系统EXT2的源代码在 usr src linux fs ext2目录下 数据结构在文件 usr src linux include linux ext2 fs h及同一目录下的文件ext2 fs i h和ext2 fs sb h中定义 EXT2中文件由逻辑块的序列组成 数据块的长度相同 不同的EXT2系统长度可以不同 文件总是整块存储 不足一块的部分也占用一个数据块 7 2 4EXT2文件系统 文件存储方式 EXT2中的每个文件都用一个单独的inode 即stuctext2 inode结构 来描述 而每个inode都有一个唯一的标志号 通过使用inode来定义文件系统的结构以及描述系统中每个文件的管理信息 EXT2文件系统中的每个文件都用一个单独的inode 即stuctext2 inode结构 来描述 而每个inode都有一个唯一的标志号 EXT2通过使用inode来定义文件系统的结构以及描述系统中每个文件的管理信息 7 2 4EXT2文件系统 挂接 mount 为ext2文件系统mount text2 dev ram0 tmp将 dev ram0上ext2文件系统挂接到 tmp目录 7 3文件系统目录结构 嵌入式Linux中 文件系统通常还是按照标准的目录结构来存放所有的文件的 7 3romfs文件系统目录结构 图7 5romfs文件系统目录结构 目录结构 proc sbin home dev bin lib etc var tem usr bin和 sbin存放了可执行程序 dev目录存放的是系统设备文件 提供系统中各种设备的说明 etc目录存放系统中各种关于用户帐号 网络等的配置文件和启动脚本 lib下存放了库文件 proc下面是系统信息 本目录是虚拟目录 并不存放在romfs中 而是在系统运行的时候自动生成 7 3romfs文件系统目录结构 proc下面是系统信息 本目录是虚拟目录 并不存放在romfs中 而是在系统运行的时候自动生成 usr目录是Linux系统里面占用磁盘空间最大的目录 是用户共享文件目录 home是系统默认的普通用户的主目录的根目录 var tmp是一些系统记录文件和临时文件存放地 7 3romfs文件系统目录结构 7 4简单编程事例 例 在uClinux中实现文件的打开和读写操作 同时对ROMFS和RAMDISK中的文件系统进行了操作 从而了解了ROMFS文件系统的特性 对在RAMDISK中保存数据有了一些认识 下面对本例题涉及到的函数进行简要介绍 intcreat constchar pathname mode tmode 以mode方式创建一个以pathname为文件名的文件 返回新的文件句柄fd 错误返回 1及错误代码errno Intopen constchar pathname intflags 以flags方式打开一个以pathname为文件名的文件 正确返回0 错误返回 1及错误代码errno size tread intfd void buf size tcount 把fd指向的文件传送count字节到buf指针所指向的内存中 正确返回实际写入的字节数 错误返回 1及错误代码errno size twrite intfd void buf size tcount 把buf指针指向的内存count字节传送到fd指向的文件中 正确返回读到的字节数或0 错误返回 1及代码errno off tlseek intfd off toffset intwhere 将fd所指文件的读写指针在where位置移动offset个位移量intclose intfd 关闭fd所指文件 顺利关闭返回0 错误返回 1 程序框图 7 4简单编程事例 源程序如下 include stdio h include include include include defineTEST STRING TESTfileoperationondifferentFS 7 4简单编程事例 intmain intargc char argv intfd op flag char filename intlen charbuf 128 checkinputpar
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 锌尘综合利用项目建筑工程方案
- 抽水蓄能电站项目施工方案
- 房屋建筑安全防护措施方案
- 房屋建筑土建施工方案
- 悬浮地基与基础施工技术方案
- 畜禽养殖场建设方案
- 河道流域灌溉排涝系统综合治理方案
- 具身机器人平台建设项目建筑工程方案
- 输电线路防汛应急预案方案
- 安全咨询日宣传方案
- 预防动物伤害安全知识教育
- 消防服务外包投标方案投标方案(技术方案)
- 结核病规范管理培训课件
- 学习通《科研诚信与学术规范》课后及考试答案
- 六年级 统编版 道德与法治 第一单元《感受生活中的法律 法律作用大》课件 第三课时
- 慢性肾脏病的中医治疗
- 维修成本优化研究
- 八大员-标准员考试模拟题(含答案)
- 2024-2030年中国企业研究院建设行业管理模式及未来发展规划预测报告
- 员工大会制度
- GB/T 44311-2024适老环境评估导则
评论
0/150
提交评论