嵌入式系统 第八讲 文件系统

• 8.1 嵌入式文件系统简介

• 8.1.1 Linux文件系统简介

– 每个操作系统使用的文件系统并不相同,例如,Windows 98 以前 的微软操作系统使用FAT(FAT16)文件系统,Windows 2000 以后 的版本使用NTFS 文件系统,而Linux 的正统文件系统是Ext2

        • FAT:File Allocation Table,文件配置表

                – FAT16使用了16位的空间来表示每个扇区(Sector)配置文件的情形,故 称之为FAT16

        • NTFS:New Technology File System新技术文件系统

        • Ext2:second Extended file system,第二代扩展文件系统

– 通常情况下,文件系统会将文件的实际内容和属性分开存放:

        • 文件的属性保存在 inode中(i节点)中,每个 inode都有自己的编 号。每个文件各占用一个 inode。不仅如此,inode中还记录着文件 数据所在 block 块的编号。

        • 文件的实际内容保存在 block 中(数据块),每个 block 都有属于自 己的编号。当文件太大时,可能会占用多个 block 块。

        • 另外,还有一个 super block(超级块)用于记录整个文件系统的整体 信息,包括 inode和 block 的总量、已经使用量和剩余量,以及文件 系统的格式和相关信息等。

• 8.1.2 嵌入式文件系统简介

– 1、嵌入式操作系统的文件系统的设计目标

        ① 使用简单方便

        ② 安全可靠

        ③ 实时响应

        ④ 接口标注的开放性和可移植性

        ⑤ 可伸展性和可配置性

        ⑥ 开放的体系结构         

        ⑦ 资源有效性

        ⑧ 功能完整性

        ⑨ 热插拔

        ⑩ 支持多种文件类型

– 2、一些流行的嵌入式文件系统

• QNX嵌入式操作系统:

QNX是一种商用的遵从POSIX规范的类Unix实时 操作系统,目标市场主要是面向嵌入式系统

        ① POSIX文件系统:Portable Operating System Interface of UNIX,可移植 操作系统接口

        ② SMB文件系统:Server Message Block,服务器报文块协议

        ③ FAT文件系统:File Allocation Table,文件分配表

        ④ CD-ROM文件系统

• VxWorks嵌入式操作系统:

VxWorks 操作系统是美国WindRiver公司于1983年 设计开发的一种嵌入式实时操作系统(RTOS)

        ① FFS:Fast File System,快速文件系统

        ② SCSI:Small Computer System Interface,小型计算机系统接口

        ③ FAT:File Allocation Table,文件分配表

        ④ RT11FS:Real Time 11 File System,实时文件系统

        ⑤ TAPEFS:TAPE File System,磁带文件系统

• 8.2 嵌入式Linux文件系统框架

• 传统文件系统

– 采用设备API,经过设备驱动,直接去访问磁盘。

– 或者,采用文件API,经过文件管理器,以及设备驱动,去访问磁盘。

 • Linux文件系统

– 采用POSIX文件API,经过设备驱动,直接去访问磁盘。

– 或者,采用POSIX文件API,经过VFS和磁盘独立转换器,以及设备驱动, 去访问磁盘。

• 8.3 JFFS2嵌入式文件系统

JFFS:Journalling Flash File System,闪存设备日志型文件系统,最初是由瑞典 的 Axis Communication AB 公司开发,其目的是作为嵌入式系统免受宕机和断 电危害的文件系统。

JFFS2:Journalling Flash File System Version2,闪存日志型文件系统第2版,其 功能就是管理在MTD设备上实现的日志型文件系统。除了提供具有断电可靠 性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现“损耗平衡” “数据压缩”等特性。

MTD:Memory Technology Device,内存技术设备。是用于访问memory设备(ROM、 flash)的Linux的子系统。MTD的主要目的是为了使新的memory设备的驱动更加简单, 为此它在硬件和上层之间提供了一个抽象的接口。MTD的所有源代码在/drivers/mtd 子目录下。CFI接口的MTD设备分为四层(从设备节点直到底层硬件驱动),这四层 从上到下依次是:设备节点、MTD设备层、MTD原始设备层和硬件驱动层

• 8.3.1 目录节点的定义

struct jffs2_raw_direct
 {
 _u16 magic;        //节点类型的补充
 _u16 nodetype;      //节点类型                
_u32 totlen;        //节点总长度
 _u32 hdr_crc;    //CRC校验码
 _u32 pino;        //上层目录节点的标号
 _u32 version;                  
_u32 ino;        //节点编号
 _u32 mctime;   //创建时间
 _u8 nsize;    //大小
 _u8 unused[2];                    
_u32 nod_crc;        //校验码
 _u32 name_crc;
 _u8 name[0];        //名称
}

• 8.3.2 数据节点

• 8.3.3 内存使用

– JFFS2中的i节点信息并没有全部存放在内存里面,存放在内存中的 节点信息是一个缩小尺寸的数据节点结构体(struct jffs2_raw_node_ref):

– 通过使用structjffs2_inode_cache结构体,管理struct jffs2_raw_node_ref信息。

– 通过使用structjffs2_sb_info结构体,管理所有的节点链表和Flash 块

• 8.3.4 JFFS3简介

JFFS3:Journalling Flash File System Version3,闪存日志型文件系统第3版

– JFFS3支持大容量Flash:大于1TB

– JFFS3是将索引信息存放在Flash上,而JFFS2则将索引信息保存在内存中

– JFFS3的基本结构借鉴了ReiserFS4的设计思想,整个文件系统就是一个B+ 树

ReiserFS4:是一种新型的文件系统,它通过一种与众不同的方式——完全 平衡树结构来容纳数据,包括文件数据,文件名以及日志支持。ReiserFS4 还以支持海量磁盘和磁盘阵列,并能在上面继续保持很快的搜索速度和很 高的效率。

B+树:是一种树数据结构,通常用于数据库和操作系统的文件系统中。B+ 树的特点是能够保持数据稳定有序,其插入与修改拥有较稳定的对数时间 复杂度。B+树元素自底向上插入,这与二叉树恰好相反

• 8.4 根文件系统

• 8.4.1 什么是根文件系统

– 系统挂载的第一个文件系统就是根文件

– 根文件系统顶层目录:

        ① bin:用户命令所在目录

        ② sbin:系统管理员命令目录

        ③ usr:共享的文件

        ④ proc:虚拟文件系统,用来显示内核及进程信息

        ⑤ dev:硬件设备文件及其它特殊文件

        ⑥ etc:系统配置文件,包括启动文件等

        ⑦ lib:链接库文件目录

        ⑧ boot:引导加载程序使用的静态文件

        ⑨ home:多用户主目录

        ⑩ mnt:装配点,用于装配临时文件系统或其他的文件系统

        ⑪ opt:附加的软件套件目录

        ⑫ root :用户主目录

        ⑬ tmp:临时文件目录

        ⑭ var:监控程序和工具程序所存放的可变数据

• Ubuntu的根文件系统(在Ubuntu的“终端”上执行):

– linux@linux-pc:/$ cd /

– linux@linux-pc:/$ ls

        • bin boot cdrom dev etc home initrd.img initrd.img.old lib lib32 lib64 libx32 media

        • mnt opt proc root run sbin snap source srv sys tftpboot tmp usr var vmlinuz vmlinuz.old

        – linux@linux-pc:/$

• 实验箱的根文件系统(在Xshell上执行):

– linux@localhost:~$ cd /

– linux@localhost:/$ ls

        • bin dev home lost+found mnt proc run snap sys tmp var

        • boot etc lib media opt root sbin srv system usr

– linux@localhost:/$

• 8.4.2 建立JFFS2根文件系统

– Linux下常用文件系统结构:

        • 采用JFFS2作为根文件系统

 – 手工建立JFFS2文件系统的步骤:

        ① 准备制作JFFS2根文件系统工具:mkfs.jffs2

        ② 建立根文件系统的目录

        ③ 编译busyBox

        ④ 复制动态链接库到lib目录中

        ⑤ 创建/etc/init.d/rcS、/etc/profile、/etc/fstab、/etc/inittab文 件,并且复制主机中的/etc/passwd、/etc/shadow、 /etc/group文件到相应的目录中

        ⑥ 移植bash,将其复制到/bin目录中

        ⑦ 执行“mkfs.jffs2 –r ./rootfs–o rootfs.jffs2 –n –e 0x20000”, 生成JFFS2根文件系统镜像

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一个没有天赋的软工大学生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值