详细分析Linux文件系统格式优劣
Linux操作系统的内核设计分析

Linux操作系统的内核设计分析Linux操作系统作为开源操作系统的代表,已经在各个领域得到了广泛应用。
而Linux操作系统的内核则是这个系统之所以能够运转的关键所在。
本文将就Linux操作系统的内核设计进行分析,并探讨其优劣之处。
一、Linux内核设计的基础Linux内核的设计基础主要包括以下几个方面:1. 开放源码Linux内核采用的是GPL协议,这意味着它是一个开放源码的项目。
这为世界各地的开发人员提供了极大的便利,方便他们进行开发和修改。
同时,这也确保了Linux内核的透明度,并且鼓励开发者贡献代码的同时,深度参与到Linux开源社区的构建和升级中。
2. 模块化Linux内核的构造采用的是模块化设计。
这种设计方式将内核代码分成独立的模块,每个模块都可以独立编译、加载和卸载。
采用模块化的设计,能够使得开发人员能够更加细致地打包、编译、并部署只包含他们需要的模块的系统。
3. 多任务Linux内核是一个基于多任务设计的系统。
这意味着它能够使得多个程序同时运行,并能够平滑高效地进行任务的切换。
这给开发人员提供了各种各样的自由,使得他们能够更加高效地进行开发。
4. 支持众多处理器架构Linux内核的支持范围非常广泛,它可以适配众多处理器架构。
这意味着一个制造商可以使用不同的处理器架构去生产设备,并且这些设备都能够安装和运行Linux操作系统。
5. 外层调用接口Linux内核支持开放式的外层调用接口。
这使得用户层可以很容易地调用Linux 内核执行某个任务。
这些用户层应用包括网上购物网站、应用程序和各种驱动程序。
6. 子系统Linux内核的子系统主要包括进程管理、内存管理、I/O管理和网络管理等。
二、Linux内核的优点Linux内核具有以下主要优点:1. 开源性Linux内核本身是一个开源的、由社区驱动的项目。
这意味着在它的附加组件和周边产品中,广大的开发者社区都可以为用户提供帮助和支持。
2. 安全性相比其他闭源操作系统,Linux内核在安全性方面更具优势。
Linux操作系统的优缺点

Linux操作系统的优缺点Linux操作系统的优缺点Linux适合追求自由,不想被约束的人们,可以自由的选择发行版本,可以随意的设定自己的界面,编辑器,文档,以自由的方式使用电脑,特别适合喜欢折腾的程序员。
下面是店铺为大家整理的Linux 操作系统的优缺点,希望能够帮助到大家。
LinuxLinux是三者中出现最晚的OS。
Linux是Unix的一个开源实现,规避了专利与版本的一些问题,同时结合了GNU的开源哲学,是一个开源的自由的操作系统。
Linux是对于OS内核的称呼,完整的称呼应该是GNU/Linux。
由于Linux早期的用户都是黑客或者技术专家,所以对于桌面的研发并不是他们最关心的问题。
所以Linux的桌面发展一直比较缓慢。
虽然开源的桌面系统有很多,但是并没有一个特别强大的桌面可以占据主导。
并且由于力量分散,在UI上做的出色的又少之又少。
目前比较出色的桌面Linux发行版有Mint, Ubuntu, Fedora, Gentoo, Arch, Debian, Manjaro, Deepin等。
已经慢慢的形成了一组新的桌面操作系统力量。
优点开源,自由软件非常丰富,可能是包含软件领域最多的操作系统之一,并且大多是开源自由的软件特别适合开发者使用基于GNU协议,是对人类的贡献性质的OS具有Unix的所有优点特别适合于开发人员支持几乎所有的CPU体系架构安装所占用的空间可以很小先进的文件系统,通常不需要磁盘管理对于服务器技术支持是最好的,大多数的服务器软件会优先支持Linux具备较强的安全性,跟Mac一样,通常不太容易中木马,病毒。
演进的特别快,通常新版本在性能,硬件支持,架构上会有所提高通常不需要花钱买软件,常用软件使用起来特别放心,不用担心象360,qq那样会窃取你的隐私视频,音频支持特别好,开源的视音频解码库开源的视频音频播放器很方便安装,不用安装有广告的播放器,这一点是三个OS里最强的安装性很强,只要不乱装软件,乱开端口,通常可以保持非常安全缺点UI界面设计优秀的比较少对于习惯了Windows的人来说,使用门槛相对比较高很多专有软件对于Linux的支持比较差对于新硬件,厂家的支持相对比较差对游戏的支持相对比较差总结Linux系统是一个很个性化的OS系统,特别是Linux本身就有很多的发行版,所以对于用户来说,首先是需要了解Linux,然后是需要选择Linux。
linux 操作系统的文件系统的特点

Linux 操作系统的文件系统特点作为一种开源、免费的操作系统,Linux 在计算机领域广泛应用,并且以其稳定性和安全性而闻名。
在Linux 操作系统中,文件系统是一个重要的组成部分,它负责管理和组织存储在硬盘上的数据。
本文将介绍Linux 操作系统文件系统的特点,以帮助读者更好地了解其优势。
一、多样的文件系统类型Linux 操作系统支持多种文件系统类型,如ext2、ext3、ext4、XFS、JFS 等。
每种文件系统类型都有其独特的特点和适用场景。
例如,ext4 是一种高性能的文件系统,适用于大容量存储;XFS 是一种适用于大型文件和高性能存储的文件系统。
这种多样性使得Linux 操作系统能够根据不同的需求和应用场景选择最适合的文件系统类型。
二、强大的文件权限管理Linux 操作系统的文件系统采用了一套灵活而强大的文件权限管理机制。
每个文件和目录都有其所属的用户和用户组,并且可以设置不同的权限,如读、写、执行等。
这种权限机制使得用户可以对文件和目录进行精确的访问控制,从而提高了系统的安全性。
三、支持符号链接符号链接是Linux 操作系统文件系统的一个重要特点。
符号链接是指一个文件或目录指向另一个文件或目录的快捷方式。
通过使用符号链接,用户可以在不改变文件或目录实际位置的情况下,创建文件或目录的别名。
这种特性在管理和组织文件时非常有用,可以提高文件系统的灵活性和可维护性。
四、可靠的日志记录Linux 操作系统的文件系统通常采用日志记录机制,以确保文件系统的可靠性和一致性。
日志记录可以记录文件系统的操作和状态变化,当系统发生故障或意外断电时,可以通过日志进行恢复,避免数据丢失或损坏。
这种可靠的日志记录机制是Linux 文件系统的一个重要特点,为用户提供了更高的数据保护和可靠性。
五、支持加密和压缩Linux 操作系统的文件系统支持加密和压缩功能。
通过使用加密功能,用户可以对文件和目录进行加密,保护敏感数据的安全性。
嵌入式Linux中常见的文件系统及特点

嵌⼊式Linux中常见的⽂件系统及特点1、Linux可⽀持的⽂件系统有多种,但是这么多种的⽂件系统都是基于Linux内核所提供的⽂件系统VFS的接⼝API。
因此对于Linux内核级别实现的⽂件系统只有VFS虚拟⽂件系统; 其余实现的⽂件系统都是调⽤VFS⽂件系统的API更上⼀层实现的;2、Linux⽂件系统的组成结构: 1、⽤户层:⽤户层向外提供Linux内核所⽀持⽂件系统的VFS的API接⼝ 内核层:内核实现了所说的各种⽂件系统 驱动层:驱动层是块设备的驱动程序 硬件层:硬件层是不同⽂件系统⽀持的存储器;3、Linux启动时的⽂件系统: 硬件上电启动,各项硬件初始化后,第⼀个启动的⽂件系统时RootFS根⽂件系统,如果说根⽂件系统没有起来,系统出现异常、将重启;4、常⽤的⽂件系统运⾏、存储设备有: DRAM、SDRAM以及ROM其中常使⽤flash;5、根据不同的存储介质,常见的⽂件系统有: 基于Flash(Nor、Nand)的⽂件系统有: jffs2:可读写,数据压缩、⽀持哈希表的⽂件系统,掉电保护;缺点:不适合使⽤在⼤容量的Nand Flash中,内存使⽤量太⼤极⼤降低数据操作速度; yaffs:读写速度快,占⽤内存⼩,实现内存访问异常处理;混合的垃圾回收算法;特别适合嵌⼊式设备使⽤;跨平台、⾃带Nand 芯⽚驱动 cramfs:只读的⽂件系统,执⾏速度快,内容⽆法扩充;⽂件系统健壮; romfs:简单紧凑、只读、不⽀持动态擦写;较多使⽤在uclinux系统上; 基于RAM存储介质的⽂件系统: ramdisk:将⼀部分固定⼤⼩的内存当做分区使⽤,不能真正算的上实际的⽂件系统,更像是⼀种机制,将实际的⽂件系统加载到内存中;将⼀些经常被访问的⽽⼜不会更改的⽂件放⼊到内存中,达到提⾼系统效率的⽬的;同时还负责将内核镜像与⽂件系统⼀块加载到内存中; ramfs/tmpfs :基于内存的⽂件系统,⼯作于虚拟⽂件系统层,可以创建多个⽂件系统,可以指定每个⽂件系统最⼤使⽤内存;这种⽂件系统将所有的⽂件都放在RAM中,既可以提⾼读写速度,也可以避免对flash⼤量的读写操作;⽂件系统不可以格式化,占⽤内存⼤⼩可以指定; ⽹络⽂件系统: NFS:是⼀种基于⽹络共享技术,可以在不同平台、不同机器、不同操作系统上实现⽂件共享、⽂件传输;在嵌⼊式Linux系统初始开发阶段可以⾮常⽅便⽂件传输、⽂件修改;地址异常进⼊模式描述0x0000,0000复位管理模式电平复位0x0000,0004未定义指令异常未定义模式遇到不能处理的指令,⽆法识别的指令0x0000,000c 软件中断管理模式异常发⽣时CPU处理的步骤:R13(sp),R15(PC)1、保存当前执⾏位置:LR寄存器(R14)2、保存当前执⾏状态:CPSR3、寻找中断⼊⼝,中断向量表:PC寄存器找向量地址4、执⾏中断处理完成:5、中断返回,继续执⾏:R14 <exception_mode> = return linkSPSR<exception_mode>=CPSRCPSR[4:0] =exception mode number;/* 处理器⼯作模式控制位 */CPSR[5]=0; /* 使⽤ARM指令集 */If<exception_mode> == reset or FIQ thenCPSR[6]= 1;/* 屏蔽快速中断FIQ */CPSR[7]=1; /* 屏蔽外部中断IRQ */PC=exception vector address;复位异常中断处理程序的主要功能:1、设置异常中断向量表:2、初始化数据栈和寄存器:3、初始化存储系统MMU:4、初始化关键IO设备:5、使能中断:6、处理器切换到合适的模式:7、初始化C变量跳转到应⽤程序执⾏:R14<SVC> = 设置相应的值;SPSR<SVC> = 设置相应的值;CPSR[4:0]=0b10011;/* 进⼊特权模式 */CPSR[5]=0; /* 使⽤ARM指令集 */CPSR[6] =1; /* 禁⽌相关关闭FIQ */CPSR[7] =1; /* 禁⽌IRQ */If high vectors configured thenPC=0xffff,0000;ElsePC= 0x0000,0000;其余的异常以此类推;异常的优先级:1、Reset: 优先级1(最⾼)2、Data abort:23、FIQ:34、IRQ:45、Prefetch abort:56、SWI或者undefined instruction:6(最低),软件中断异常或者未定义指令异常ARM硬件接⼝:1、程序的链接地址和程序地址:ld程序链接地址程序链接地址:是程序运⾏的起始地址;程序地址:是程序保存在硬盘中的地址;2、呵呵呵。
linux比较文件内容

linux比较文件内容Linux比较文件内容。
在Linux系统中,比较文件内容是一项常见的操作,它可以帮助我们找出文件之间的差异,或者确认它们是否完全相同。
在本文中,我们将介绍几种常见的方法来比较文件内容,以及它们各自的优缺点。
1. 使用diff命令。
diff命令是最常见的文件内容比较工具之一,它可以逐行比较两个文件,并显示它们之间的区别。
使用diff命令的基本语法如下: ```bash。
diff file1 file2。
```。
这将会输出file1和file2之间的差异,如果文件完全相同,则不会有任何输出。
diff命令的优点是简单易用,但对于大型文件或者文件行数较多的情况下,输出结果可能会比较混乱。
2. 使用vimdiff命令。
vimdiff是Vim编辑器自带的文件比较工具,它可以在Vim的界面中直观地显示两个文件之间的差异。
要使用vimdiff命令,只需要在命令行中输入以下命令:```bash。
vimdiff file1 file2。
```。
这将会打开Vim编辑器,并在界面中显示file1和file2之间的差异。
使用vimdiff命令的优点是可以直接在Vim中进行编辑,并且对于熟悉Vim操作的用户来说,操作起来会更加方便。
3. 使用cmp命令。
cmp命令是另一种比较文件内容的工具,它可以逐字节地比较两个文件,并在发现第一个不同之处时停止。
使用cmp命令的语法如下:```bash。
cmp file1 file2。
```。
如果文件完全相同,则cmp命令不会有任何输出;如果文件不同,则会输出它们之间的差异。
cmp命令的优点是速度较快,但缺点是不够直观,无法显示具体的差异内容。
4. 使用md5sum命令。
md5sum命令可以生成文件的MD5校验和,通过比较两个文件的MD5校验和,我们可以判断它们是否完全相同。
md5sum命令的语法如下:```bash。
md5sum file1。
md5sum file2。
linux读取文件默认编码格式

linux读取文件默认编码格式Linux是一种开源的操作系统,广泛应用于服务器和嵌入式设备中。
在Linux中,读取文件的默认编码格式是UTF-8。
UTF-8是一种可变长度的编码方式,它可以表示世界上几乎所有的字符。
相比于其他编码方式,UTF-8具有以下优势:1. 兼容性强:UTF-8可以兼容ASCII编码,也就是说,ASCII编码的字符在UTF-8中可以直接表示,不需要进行转换。
这使得在Linux中读取ASCII编码的文件非常方便。
2. 多语言支持:UTF-8可以表示世界上几乎所有的语言字符,包括中文、日文、韩文等。
这使得在Linux中读取不同语言的文件时,不需要考虑编码转换的问题。
3. 空间效率高:UTF-8采用可变长度的编码方式,对于ASCII字符只需要一个字节表示,而对于其他字符则需要多个字节表示。
这使得在Linux中读取文件时,可以节省存储空间。
在Linux中,读取文件的默认编码格式是由系统的locale设置决定的。
locale是一种用于描述特定地区和语言环境的配置文件,它包含了字符集、日期格式、货币符号等信息。
可以通过以下命令查看当前系统的locale设置:```$ locale```输出结果中的LC_CTYPE字段即为当前系统的字符集设置。
如果LC_CTYPE字段的值为UTF-8,则表示系统的默认编码格式为UTF-8。
在Linux中,可以使用各种文本编辑器来读取文件。
无论是使用vi、nano还是gedit等编辑器,它们都会自动根据文件的编码格式来解析文件内容。
如果要读取其他编码格式的文件,可以使用iconv命令进行转换。
iconv是一个用于字符编码转换的工具,可以将文件从一种编码格式转换为另一种编码格式。
例如,要将一个GBK编码的文件转换为UTF-8编码,可以使用以下命令:```$ iconv -f gbk -t utf-8 input.txt > output.txt```上述命令将输入文件input.txt的编码格式从GBK转换为UTF-8,并将转换后的内容输出到output.txt文件中。
简述linux文件的类型

简述linux文件的类型Linux文件的类型在Linux系统中,文件是存储和组织数据的基本单位。
在Linux中,文件的类型可以通过文件的扩展名、文件的权限、文件的内容等多种方式来确定。
本文将从不同的角度来描述Linux文件的类型。
一、常见的文件类型1. 普通文件:普通文件是最常见的文件类型,用于存储文本、图像、音频等数据。
普通文件可以分为纯文本文件和二进制文件两种类型。
纯文本文件是由可读的字符组成的文件,可以使用文本编辑器打开查看和编辑。
而二进制文件则包含了非文本的数据,无法直接阅读,通常需要特定的软件或工具来解析和处理。
2. 目录文件:目录文件是用于组织和管理其他文件和目录的文件。
在Linux系统中,目录文件类似于文件夹,可以包含其他文件和目录。
用户可以使用命令来创建、删除、复制、移动和重命名目录文件。
3. 设备文件:设备文件用于与硬件设备进行通信和交互。
在Linux 系统中,设备文件被视为特殊文件,可以访问和操作硬件设备,例如键盘、鼠标、打印机等。
设备文件可以分为字符设备文件和块设备文件两种类型。
字符设备文件以字符为单位进行读写操作,而块设备文件以块为单位进行读写操作。
4. 符号链接文件:符号链接文件是指向其他文件或目录的文件,类似于快捷方式。
符号链接文件可以跨文件系统,可以方便地引用其他位置的文件或目录。
在Linux系统中,可以使用ln命令创建符号链接文件。
二、根据文件权限来确定文件类型在Linux系统中,每个文件都有相应的权限,用于控制对文件的访问和操作。
根据文件的权限,可以判断文件的类型。
1. 可执行文件:可执行文件具有执行权限,可以直接运行。
通常,可执行文件是二进制文件,包含了可执行的机器代码。
2. 可读文件:可读文件具有读取权限,可以被打开和读取。
大多数普通文件都属于可读文件。
3. 可写文件:可写文件具有写入权限,可以被修改和编辑。
用户可以向可写文件中写入数据。
4. 可执行和可读文件:拥有执行和读取权限的文件既可以运行,又可以被读取。
linux操作系统文件类型有哪几种

linux操作系统文件类型有哪几种,有什么区别一、Linux文件结构文件结构是文件存放在磁盘等存贮设备上的组织方法。
主要体现在对文件和目录的组织上。
目录提供了管理文件的一个方便而有效的途径。
Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。
/根目录┃┏━━┳━━━┳━━━┳━━━╋━━━┳━━━┳━━━┳━━━┓┃┃┃┃┃┃┃┃┃bin home dev etc lib sbin tmp usr var┃┃┏━┻━┓┏━━┳━━┳━━┳━┻━┳━━┓┃┃┃┃┃┃┃┃rc.d cron.d X11R6 src lib local man bin┃┏━━━┳━━┳━┻━┳━━━┓┃┃┃┃┃init.d rc0.d rc1.d rc2.d …… linux bin lib srcLinux采用的是树型结构。
最上层是根目录,其他的所有目录都是从根目录出发而生成的。
微软的DOS和windows也是采用树型结构,但是在DOS和windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。
但是在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。
从结构上讲,各个磁盘分区上的树型目录不一定是并列的。
如果这样讲不好理解的话,我来举个例子:有一块硬盘,分成了4个分区,分别是/;/boot;/usr和windows下的fat 对于/和/boot或者/和/usr,它们是从属关系;对于/boot和/usr,它们是并列关系。
如果我把windows下的fat分区挂载到/mnt/winc下,(挂载??哦,别急,呵呵,一会就讲,一会就讲。
)那么对于/mnt/winc和/usr或/mnt/winc和/boot 来说,它们是从属于目录树上没有任何关系的两个分支。
因为linux是一个多用户系统,制定一个固定的目录规划有助于对系统文件和不同的用户文件进行统一管理。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
∙摘要:Linux支持多种文件系统,包括ext2、iso9660、jffs、ext3、vfat、ntfs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System)∙标签:文件系统∙Linux由于其开源安全特性正在被多数企业所接受。
Linux支持很多种文件系统,ext3、vfat、ntfs、romfs和nfs等,为了对各类文件系统进行统一管理,Linux引入了另一个文件系统VFS(Virtual File System)。
下面我们就分析一下他的各种文件系统格式的特点基于RAM的文件系统(1)RamdiskRamdisk是将一部分固定大小的内存当作分区来使用。
它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。
将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)ramfs/tmpfsRamfs是LinusTorvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。
(实际上,VFS 本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。
Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。
Ramfs/tmpfs相对于传统的Ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
Tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
3.网络文件系统NFS(NetworkFileSystem)NFS是由Sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。
在嵌入式Linux系统的开发调试阶段,可以利用该技术在主机上建立基于NFS 的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
附录:NOR闪存与NAND闪存比较以上讨论的都是基于存储设备的文件系统(memory-basedfilesystem),它们都可用作Linux的根文件系统。
实际上,Linux还支持逻辑的或伪文件系统(logicalorpseudofilesystem),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。
新手学堂:嵌入式Linux文件系统详细介绍Linux支持多种文件系统,包括ext2、ext3、vfat、ntfs、iso9660、jffs、romfs 和nfs等,为了对各类文件系统进行统一管理,Linux引入了虚拟文件系统VFS(Virtual File System),为各类文件系统提供一个统一的操作界面和应用编程接口。
Linux下的文件系统结构如下:Linux下的文件系统结构Linux启动时,第一个必须挂载的是根文件系统;若系统不能从指定设备上挂载根文件系统,则系统会出错而退出启动。
之后可以自动或手动挂载其他的文件系统。
因此,一个系统中可以同时存在不同的文件系统。
不同的文件系统类型有不同的特点,因而根据存储设备的硬件特性、系统需求等有不同的应用场合。
在嵌入式Linux应用中,主要的存储设备为RAM(DRAM, SDRAM)和ROM(常采用FLASH存储器),常用的基于存储设备的文件系统类型包括:jffs2, yaffs, cramfs, romfs, ramdisk, ramfs/tmpfs等。
1. 基于FLASH的文件系统Flash(闪存)作为嵌入式系统的主要存储媒介,有其自身的特性。
Flash的写入操作只能把对应位置的1修改为0,而不能把0修改为1(擦除Flash就是把对应存储块的内容恢复为1),因此,一般情况下,向Flash写入内容时,需要先擦除对应的存储区间,这种擦除是以块(block)为单位进行的。
闪存主要有NOR和NAND两种技术(简单比较见附录)。
Flash存储器的擦写次数是有限的,NAND闪存还有特殊的硬件接口和读写时序。
因此,必须针对Flash的硬件特性设计符合应用要求的文件系统;传统的文件系统如ext2等,用作Flash的文件系统会有诸多弊端。
在嵌入式Linux下,MTD(Memory Technology Device,存储技术设备)为底层硬件(闪存)和上层(文件系统)之间提供一个统一的抽象接口,即Flash的文件系统都是基于MTD 驱动层的(参见上面的Linux下的文件系统结构图)。
使用MTD驱动程序的主要优点在于,它是专门针对各种非易失性存储器(以闪存为主)而设计的,因而它对Flash有更好的支持、管理和基于扇区的擦除、读/写操作接口。
顺便一提,一块Flash芯片可以被划分为多个分区,各分区可以采用不同的文件系统;两块Flash芯片也可以合并为一个分区使用,采用一个文件系统。
即文件系统是针对于存储器分区而言的,而非存储芯片。
(1) jffs2JFFS文件系统最早是由瑞典Axis Communications公司基于Linux2.0的内核为嵌入式系统开发的文件系统。
JFFS2是RedHat公司基于JFFS开发的闪存文件系统,最初是针对RedHat公司的嵌入式产品eCos开发的嵌入式文件系统,所以JFFS2也可以用在Linux, uCLinux中。
Jffs2: 日志闪存文件系统版本2 (Journalling Flash FileSystem v2)主要用于NOR型闪存,基于MTD驱动层,特点是:可读写的、支持数据压缩的、基于哈希表的日志型文件系统,并提供了崩溃/掉电安全保护,提供“写平衡”支持等。
缺点主要是当文件系统已满或接近满时,因为垃圾收集的关系而使jffs2的运行速度大大放慢。
目前jffs3正在开发中。
关于jffs系列文件系统的使用详细文档,可参考MTD补丁包中mtd-jffs-HOWTO.txt。
jffsx不适合用于NAND闪存主要是因为NAND闪存的容量一般较大,这样导致jffs 为维护日志节点所占用的内存空间迅速增大,另外,jffsx文件系统在挂载时需要扫描整个FLASH的内容,以找出所有的日志节点,建立文件结构,对于大容量的NAND闪存会耗费大量时间。
(2) yaffs:Yet Another Flash File Systemyaffs/yaffs2是专为嵌入式系统使用NAND型闪存而设计的一种日志型文件系统。
与jffs2相比,它减少了一些功能(例如不支持数据压缩),所以速度更快,挂载时间很短,对内存的占用较小。
另外,它还是跨平台的文件系统,除了Linux和eCos,还支持WinCE, pSOS和ThreadX等。
yaffs/yaffs2自带NAND芯片的驱动,并且为嵌入式系统提供了直接访问文件系统的API,用户可以不使用Linux中的MTD与VFS,直接对文件系统操作。
当然,yaffs也可与MTD驱动程序配合使用。
yaffs与yaffs2的主要区别在于,前者仅支持小页(512 Bytes) NAND闪存,后者则可支持大页(2KB) NAND闪存。
同时,yaffs2在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
(3) Cramfs:Compressed ROM File SystemCramfs是Linux的创始人Linus Torvalds参与开发的一种只读的压缩文件系统。
它也基于MTD驱动程序。
在cramfs文件系统中,每一页(4KB)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的Flash存储空间,使系统可通过更低容量的FLASH存储相同的文件,从而降低系统成本。
Cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以XIP方式运行,所有的应用程序要求被拷到RAM里去运行,但这并不代表比Ramfs需求的RAM 空间要大一点,因为Cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,Cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到RAM中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
由于以上特性,Cramfs在嵌入式系统中应用广泛。
但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。
Cramfs映像通常是放在Flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。
(4) Romfs传统型的Romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以XIP(eXecute In Place,片内运行)方式运行,在系统运行时,节省RAM空间。
uClinux系统通常采用Romfs文件系统。
其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如PDA, Smartphone, 数码相机等的SD卡),这主要是为了更好的与最流行的Windows桌面操作系统相兼容。
ext2也可以作为嵌入式Linux的文件系统,不过将它用于FLASH闪存会有诸多弊端。
2. 基于RAM的文件系统(1) RamdiskRamdisk是将一部分固定大小的内存当作分区来使用。
它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。
将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过Ramdisk放在内存中,可以明显地提高系统的性能。
在Linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)ramfs/tmpfsRamfs是Linus Torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(VFS)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。
(实际上,VFS本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。
)Ramfs/tmpfs文件系统把所有的文件都放在RAM中,所以读/写操作发生在RAM中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对Flash存储器的读写损耗,也提高了数据读写速度。