嵌入式开发基础知识你了解有多少

linux支持多种文件系统类型,在嵌入式开发中上常用有:romfs、jffs2、nfs、cramfs、yaffs、ubifs等。
jffs文件系统
jffs文件系统最早是由瑞典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闪存会耗费大量时间。
yaffs:yet another flash file system
yaffs/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在内存空间占用、垃圾回收速度、读/写速度等方面均有大幅提升。
cramfs:compressed rom file system
cramfs是linux的创始人 linus torvalds参与开发的一种只读的压缩文件系统。它也基于mtd驱动程序。
在cramfs文件系统中,每一页(4kb)被单独压缩,可以随机页访问,其压缩比高达2:1,为嵌入式系统节省大量的flash存储空间,使系统可通过更低容量的flash存储相同的文件,从而降低系统成本。
cramfs文件系统以压缩方式存储,在运行时解压缩,所以不支持应用程序以xip方式运行,所有的应用程序要求被拷到ram里去运行,但这并不代表比ramfs需求的ram空间要大一点,因为cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,尚没有读取的部分不分配内存空间,当我们读取的档案不在内存时,cramfs文件系统自动计算压缩后的资料所存的位置,再即时解压缩到ram中。
另外,它的速度快,效率高,其只读的特点有利于保护文件系统免受破坏,提高了系统的可靠性。
由于以上特性,cramfs在嵌入式系统中应用广泛。
但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。
cramfs映像通常是放在flash中,但是也能放在别的文件系统里,使用loopback 设备可以把它安装别的文件系统里。
romfs
传统型的romfs文件系统是一种简单的、紧凑的、只读的文件系统,不支持动态擦写保存,按顺序存放数据,因而支持应用程序以xip(execute in place,片内运行)方式运行,在系统运行时,节省ram空间。uclinux系统通常采用romfs文件系统。
其他文件系统:fat/fat32也可用于实际嵌入式系统的扩展存储器(例如pda, smartphone, 数码相机等的sd卡),这主要是为了更好的与最流行的windows桌面操作系统相兼容。ext2也可以作为嵌入式linux的文件系统,不过将它用于flash闪存会有诸多弊端。
2. 基于ram的文件系统
(1) ramdisk
ramdisk是将一部分固定大小的内存当作分区来使用。它并非一个实际的文件系统,而是一种将实际的文件系统装入内存的机制,并且可以作为根文件系统。将一些经常被访问而又不会更改的文件(如只读的根文件系统)通过ramdisk放在内存中,可以明显地提高系统的性能。
在linux的启动阶段,initrd提供了一套机制,可以将内核映像和根文件系统一起载入内存。
(2)ramfs/tmpfs
ramfs是linus torvalds开发的一种基于内存的文件系统,工作于虚拟文件系统(vfs)层,不能格式化,可以创建多个,在创建时可以指定其最大能使用的内存大小。(实际上,vfs本质上可看成一种内存文件系统,它统一了文件在内核中的表示方式,并对磁盘文件系统进行缓冲。)
ramfs/tmpfs文件系统把所有的文件都放在ram中,所以读/写操作发生在ram中,可以用ramfs/tmpfs来存储一些临时性或经常要修改的数据,例如/tmp和/var目录,这样既避免了对flash存储器的读写损耗,也提高了数据读写速度。
ramfs/tmpfs相对于传统的ramdisk的不同之处主要在于:不能格式化,文件系统大小可随所含文件内容大小变化。
tmpfs的一个缺点是当系统重新引导时会丢失所有数据。
3. 网络文件系统nfs (network file system)
nfs是由sun开发并发展起来的一项在不同机器、不同操作系统之间通过网络共享文件的技术。在嵌入式linux系统的开发调试阶段,可以利用该技术在主机上建立基于nfs的根文件系统,挂载到嵌入式设备,可以很方便地修改根文件系统的内容。
以上讨论的都是基于存储设备的文件系统(memory-based file system),它们都可用作linux的根文件系统。实际上,linux还支持逻辑的或伪文件系统(logical or pseudo file system),例如procfs(proc文件系统),用于获取系统信息,以及devfs(设备文件系统)和sysfs,用于维护设备文件。
来源:朗锐智科

多方面了解晶体和晶振的区别(定义 参数 电路 分类)
浅谈翎翔余压监控系统助力新兴消防建设
亚马逊首次推出了新处理器和一系列新的机器学习服务
如何实现更实用的低温锂硫电池技术
华为Mate9PRO和Mate9有哪些区别
嵌入式开发基础知识你了解有多少
盘点苹果iOS14.3正式版的更新
乐视汽车业务爆出拖款和高管大量离职
热切割与水切割的特点优势
雷曼光电将举行超大8K超高清Micro LED显示屏发布会
国产手机厂商OPPO召开新品发布会,推出OPPO Reno Ace和OPPO K5
谈谈如何对动力锂离子电池组的进行维护
手机OLED屏幕争夺战打响 液晶屏=低端货
十大电子行业网站及调查比较
电子元器件代码的一般读取规则和顺序
福禄克刀锋钳表301一如既往地反应快、精度高
中美贸易摩擦下美国将失去全球领导地位
解答光纤光缆单模和多模的热门问题-科兰
TI-AFE在新型健康检测产品的应用介绍
供应链重构与数字化案例 浪潮信息获IDC数字供应链领导者奖