需要了解嵌入式Linux文件系统及其存储机制

嵌入式系统与通用pc机不同,一般没有硬盘这样的存储设备而是使用flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置,本文分析了嵌入式系统中常用的存储设备及其管理机制,介绍了常用的基于flash的文件系统类型。
1.嵌入式系统存储设备及其管理机制分析
构建适用于嵌入式系统的linux文件系统,必然会涉及到两个关键点,一是文件系统类型的选择,它关系到文件系统的读写性能、尺寸大小;另一个就是根文件系统内容的选择,它关系到根文件系统所能提供的功能及尺寸大小。
嵌入式设备中使用的存储器是像flash闪存芯片、小型闪存卡等专为嵌入式系统设计的存储装置。flash是目前嵌入式系统中广泛采用的主流存储器,它的主要特点是按整体/扇区擦除和按字节编程,具有低功耗、高密度、小体积等优点。目前,flash分为nor, nand两种类型。
nor型闪存可以直接读取芯片内储存的数据,因而速度比较快,但是价格较高。nor型芯片,地址线与数据线分开,所以nor型芯片可以像sram一样连在数据线上,对nor芯片可以“字”为基本单位操作,因此传输效率很高,应用程序可以直接在flash内运行,不必再把代码读到系统ram中运行。它与sram的最大不同在于写操作需要经过擦除和写入两个过程。
nand型闪存芯片共用地址线与数据线,内部数据以块为单位进行存储,直接将nand芯片做启动芯片比较难。nand闪存是连续存储介质,适合放大文件。擦除nor器件时是以64-128kb的块进行的,执行一个写入/擦除操作的时间为5s;擦除nand器件是以8-32kb的块进行的,执行相同的操作最多只需要4ms。
nand rash的单元尺寸几乎是nor器件的一半,由于生产过程更为简单,nand结构可以在给定的模具尺寸内提供更高的容量,也就相应地降低了价格。nor flash占据了容量为1―16mb闪存市场的大部分,而nand flash只是用在8―128mb的产品当中,这也说明nor主要应用在代码存储介质中,nand适合于数据存储。
寿命(耐用性),在nand闪存中每个块的最大擦写次数是一百万次,而nor的擦写次数是十万次。nand存储器除了具有10比1的块擦除周期优势,典型的nand块尺寸要比nor器件小8倍,每个nand存储器块在给定的时间内的删除次数要少一些。
所有嵌入式系统的启动都至少需要使用某种形式的永久性存储设备,它们需要合适的驱动程序,当前在嵌入式linux中有三种常用的块驱动程序可以选择。
● blkmem驱动层
blkmem驱动是为uclinux专门设计的,也是最早的一种块驱动程序之一,现在仍然有很多嵌入式linux操作系统选用它作为块驱动程,尤其是在uclinux中。它相对来说是最简单的,而且只支持建立在nor型flash和ram中的根文件系统。使用blkmem驱动,建立flash分区配置比较困难,这种驱动程序为flash提供了一些基本擦除/写操作。
● ramdisk驱动层
ramdisk驱动层通常应用在标准linux中无盘工作站的启动,对flash存储器并不提供任何的直接支持, ram disk就是在开机时,把一部分的内存虚拟成块设备,并且把之前所准备好的档案系统映像解压缩到该ram disk环境中。当在flash中放置一个压缩的文件系统,可以将文件系统解压到ram,使用ram disk驱动层支持一个保持在ram中的文件系统。
● mtd驱动层
为了尽可能避免针对不同的技术使用不同的工具,以及为不同的的技术提供共同的能力,linux内核纳入了mtd子系统(memory technology device)。它提供了一致且统一的接口,让底层的mtd芯片驱动程序无缝地与较高层接口组合在一起。
jffs2, cramfs, yaffs等文件系统都可以被安装成mtd块设备。mtd驱动也可以为那些支持cfi接口的nor型flash提供支持。虽然mtd可以建立在ram上,但它是专为基于flash的设备而设计的。mtd包含特定flash芯片的驱动程序,开发者要选择适合自己系统的flash芯片驱动。flash芯片驱动向上层提供读、写、擦除等基本的操作,mtd对这些操作进行封装后向用户层提供mtd char和mtd block类型的设备。
mtd char类型的设备包括/dev/mtd0, /dev/mtdl等,它们提供对flash原始字符的访问。mtd block类型的设备包括/dev/mtdblock0,/dev/mtdblock1等,mtd block设备是将flash模拟成块设备,这样可以在这些模拟的块设备上创建像cramfs, jffs2等格式的文件系统。
mtd驱动层也支持在一块flash上建立多个flash分区,每一个分区作为了一个mtd block设备,可以把系统软件和数据等分配到不同的分区上,同时可以在不同的分区采用不用的文件系统格式。这一点非常重要,正是由于这一点才为嵌入式系统多文件系统的建立提供了灵活性。
2. 基于flash的文件系统
鉴于flash存储介质的读写特点,传统的linux文件系统己经不适合应用在嵌入式系统中,像ext2fs文件系统是为像ide那样的块设备设计的,这些设备的逻辑块是512字节、1024字节等大小,没有提供很好的扇区
擦写支持,不支持损耗平衡,没有掉电保护,也没有特别完美的扇区管理,这不太适合于扇区大小因设备类型而划分的闪存设备。基于这样的原因,产生了很多专为flash设备而设计的文件系统,常见的专用于闪存设备的文件系统如下:
● romfs
传统型的romfs文件系统是最常使用的一种文件系统,它是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存;它按顺序存放所有的文件数据,所以这种文件系统格式支持应用程序以xip方式运行,在系统运行时,可以获得可观的ram节省空间。uclinux系统通常采用romfs文件系统。
● cramfs
cramfs是linux的创始人linus torvalds开发的一种可压缩只读文件系统在cramfs文件系统中,每一页被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的flash存储空间。cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以xip方式运行,所有的应用程序要求被拷到ram里去运行,但这并不代表比ramfs需求的ram 空间要大一点,因为cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时, cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到ram中。

5G专利问题是未来影响5G发展的重要因素
为帮助沃特玛恢复生产和缓解危机,坚瑞沃能再次启动自救行动
微压差表检定规程的常见问题分析
机器学习再立功,斯坦福大牛团队实现无创早期肺癌筛查
智能电网产生的背景
需要了解嵌入式Linux文件系统及其存储机制
超小型MEMS原子钟适用于智能手机
锤子坚果Pro产量破一百万台,锤子手机里程碑达成,迎来价格大降价
国芯思辰对标AD7606,八通道16位SC1463可用于电力线路监控系统中
锤子坚果Pro最新消息:老罗又搞大事件,锤子坚果Pro手机推迟至5月发布
谷歌2017年将接近绿色能源目标 100%用电均来自可再生能源
5G助力让通过软硬件结合实现一键开关机技术案例
基于PCI总线的电视图像处理仿真系统设计
SIT1021Q国产LIN收发器芯片,可替代TJA1021
SSH第2部分:从Windows 10工作站配置SSH
人工智能正成为中国科技创新的一个新标签
Facebook推出新的安静模式,让用户不受噪音干扰
vivo Xplay6库里版开箱:4998元深度定制一点不贵!
ANDON高可靠性图像传感器插座AMS (CMOSIS)的功能
特斯拉12V到48V的配电系统改变