姓名:袁永輝? ? ? 學(xué)號(hào):17101223423
轉(zhuǎn)載自:http://mp.weixin.qq.com/s/FGPdjMT1Rv7RHD2B6ORzQg
【嵌牛導(dǎo)讀】:Linux支持多種文件系統(tǒng)類(lèi)型,在嵌入式上常用有:ROMFS爆安、JFFS2叛复、NFS、CRAMFS、YAFFS褐奥、UBIFS等咖耘。
【嵌牛鼻子】: Linux ;文件系統(tǒng)
【嵌牛提問(wèn)】:ROMFS撬码、JFFS2儿倒、NFS、CRAMFS呜笑、YAFFS夫否、UBIFS文件系統(tǒng)的主要特點(diǎn)及適用操作是什么?
【嵌牛正文】:
1.JFFS文件系統(tǒng)
JFFS文件系統(tǒng)最早是由瑞典Axis Communications公司基于Linux2.0的內(nèi)核為嵌入式系統(tǒng)開(kāi)發(fā)的文件系統(tǒng)叫胁。JFFS2是RedHat公司基于JFFS開(kāi)發(fā)的閃存文件系統(tǒng)凰慈,最初是針對(duì)RedHat公司的嵌入式產(chǎn)品eCos開(kāi)發(fā)的嵌入式文件系統(tǒng),所以JFFS2也可以用在Linux, uCLinux中曹抬。
Jffs2: 日志閃存文件系統(tǒng)版本2 (Journalling Flash FileSystem v2)
主要用于NOR型閃存溉瓶,基于MTD驅(qū)動(dòng)層,特點(diǎn)是:可讀寫(xiě)的谤民、支持?jǐn)?shù)據(jù)壓縮的堰酿、基于哈希表的日志型文件系統(tǒng),并提供了崩潰/掉電安全保護(hù)张足,提供“寫(xiě)平衡”支持等触创。缺點(diǎn)主要是當(dāng)文件系統(tǒng)已滿(mǎn)或接近滿(mǎn)時(shí),因?yàn)槔占年P(guān)系而使jffs2的運(yùn)行速度大大放慢为牍。
目前jffs3正在開(kāi)發(fā)中哼绑。關(guān)于jffs系列文件系統(tǒng)的使用詳細(xì)文檔,可參考MTD補(bǔ)丁包中mtd-jffs-HOWTO.txt碉咆。
jffsx不適合用于NAND閃存主要是因?yàn)镹AND閃存的容量一般較大抖韩,這樣導(dǎo)致jffs為維護(hù)日志節(jié)點(diǎn)所占用的內(nèi)存空間迅速增大,另外疫铜,jffsx文件系統(tǒng)在掛載時(shí)需要掃描整個(gè)FLASH的內(nèi)容茂浮,以找出所有的日志節(jié)點(diǎn),建立文件結(jié)構(gòu)壳咕,對(duì)于大容量的NAND閃存會(huì)耗費(fèi)大量時(shí)間席揽。
yaffs:Yet Another Flash File System
yaffs/yaffs2是專(zhuān)為嵌入式系統(tǒng)使用NAND型閃存而設(shè)計(jì)的一種日志型文件系統(tǒng)。與jffs2相比谓厘,它減少了一些功能(例如不支持?jǐn)?shù)據(jù)壓縮)幌羞,所以速度更快,掛載時(shí)間很短竟稳,對(duì)內(nèi)存的占用較小属桦。另外熊痴,它還是跨平臺(tái)的文件系統(tǒng),除了Linux和eCos地啰,還支持WinCE, pSOS和ThreadX等愁拭。
yaffs/yaffs2自帶NAND芯片的驅(qū)動(dòng),并且為嵌入式系統(tǒng)提供了直接訪問(wèn)文件系統(tǒng)的API亏吝,用戶(hù)可以不使用Linux中的MTD與VFS,直接對(duì)文件系統(tǒng)操作盏混。當(dāng)然蔚鸥,yaffs也可與MTD驅(qū)動(dòng)程序配合使用。
yaffs與yaffs2的主要區(qū)別在于许赃,前者僅支持小頁(yè)(512 Bytes) NAND閃存止喷,后者則可支持大頁(yè)(2KB) NAND閃存。同時(shí)混聊,yaffs2在內(nèi)存空間占用弹谁、垃圾回收速度、讀/寫(xiě)速度等方面均有大幅提升句喜。
Cramfs:Compressed ROM File System
Cramfs是Linux的創(chuàng)始人 Linus Torvalds參與開(kāi)發(fā)的一種只讀的壓縮文件系統(tǒng)预愤。它也基于MTD驅(qū)動(dòng)程序。
在cramfs文件系統(tǒng)中咳胃,每一頁(yè)(4KB)被單獨(dú)壓縮植康,可以隨機(jī)頁(yè)訪問(wèn),其壓縮比高達(dá)2:1,為嵌入式系統(tǒng)節(jié)省大量的Flash存儲(chǔ)空間展懈,使系統(tǒng)可通過(guò)更低容量的FLASH存儲(chǔ)相同的文件销睁,從而降低系統(tǒng)成本。
Cramfs文件系統(tǒng)以壓縮方式存儲(chǔ)存崖,在運(yùn)行時(shí)解壓縮冻记,所以不支持應(yīng)用程序以XIP方式運(yùn)行,所有的應(yīng)用程序要求被拷到RAM里去運(yùn)行来惧,但這并不代表比Ramfs需求的RAM空間要大一點(diǎn)冗栗,因?yàn)镃ramfs是采用分頁(yè)壓縮的方式存放檔案,在讀取檔案時(shí)违寞,不會(huì)一下子就耗用過(guò)多的內(nèi)存空間贞瞒,只針對(duì)目前實(shí)際讀取的部分分配內(nèi)存,尚沒(méi)有讀取的部分不分配內(nèi)存空間趁曼,當(dāng)我們讀取的檔案不在內(nèi)存時(shí)军浆,Cramfs文件系統(tǒng)自動(dòng)計(jì)算壓縮后的資料所存的位置,再即時(shí)解壓縮到RAM中挡闰。
另外乒融,它的速度快掰盘,效率高,其只讀的特點(diǎn)有利于保護(hù)文件系統(tǒng)免受破壞赞季,提高了系統(tǒng)的可靠性愧捕。
由于以上特性,Cramfs在嵌入式系統(tǒng)中應(yīng)用廣泛申钩。
但是它的只讀屬性同時(shí)又是它的一大缺陷次绘,使得用戶(hù)無(wú)法對(duì)其內(nèi)容對(duì)進(jìn)擴(kuò)充。
Cramfs映像通常是放在Flash中撒遣,但是也能放在別的文件系統(tǒng)里邮偎,使用loopback 設(shè)備可以把它安裝別的文件系統(tǒng)里。
Romfs
傳統(tǒng)型的Romfs文件系統(tǒng)是一種簡(jiǎn)單的义黎、緊湊的禾进、只讀的文件系統(tǒng),不支持動(dòng)態(tài)擦寫(xiě)保存廉涕,按順序存放數(shù)據(jù)泻云,因而支持應(yīng)用程序以XIP(eXecute In Place,片內(nèi)運(yùn)行)方式運(yùn)行狐蜕,在系統(tǒng)運(yùn)行時(shí)宠纯,節(jié)省RAM空間。uClinux系統(tǒng)通常采用Romfs文件系統(tǒng)馏鹤。
其他文件系統(tǒng):fat/fat32也可用于實(shí)際嵌入式系統(tǒng)的擴(kuò)展存儲(chǔ)器(例如PDA, Smartphone, 數(shù)碼相機(jī)等的SD卡)征椒,這主要是為了更好的與最流行的Windows桌面操作系統(tǒng)相兼容。ext2也可以作為嵌入式Linux的文件系統(tǒng)湃累,不過(guò)將它用于FLASH閃存會(huì)有諸多弊端勃救。
2. 基于RAM的文件系統(tǒng)
(1) Ramdisk
Ramdisk是將一部分固定大小的內(nèi)存當(dāng)作分區(qū)來(lái)使用。它并非一個(gè)實(shí)際的文件系統(tǒng)治力,而是一種將實(shí)際的文件系統(tǒng)裝入內(nèi)存的機(jī)制蒙秒,并且可以作為根文件系統(tǒng)。將一些經(jīng)常被訪問(wèn)而又不會(huì)更改的文件(如只讀的根文件系統(tǒng))通過(guò)Ramdisk放在內(nèi)存中宵统,可以明顯地提高系統(tǒng)的性能晕讲。
在Linux的啟動(dòng)階段,initrd提供了一套機(jī)制马澈,可以將內(nèi)核映像和根文件系統(tǒng)一起載入內(nèi)存瓢省。
(2)ramfs/tmpfs
Ramfs是Linus Torvalds開(kāi)發(fā)的一種基于內(nèi)存的文件系統(tǒng),工作于虛擬文件系統(tǒng)(VFS)層痊班,不能格式化勤婚,可以創(chuàng)建多個(gè),在創(chuàng)建時(shí)可以指定其最大能使用的內(nèi)存大小涤伐。(實(shí)際上馒胆,VFS本質(zhì)上可看成一種內(nèi)存文件系統(tǒng)缨称,它統(tǒng)一了文件在內(nèi)核中的表示方式,并對(duì)磁盤(pán)文件系統(tǒng)進(jìn)行緩沖祝迂。)
Ramfs/tmpfs文件系統(tǒng)把所有的文件都放在RAM中睦尽,所以讀/寫(xiě)操作發(fā)生在RAM中,可以用ramfs/tmpfs來(lái)存儲(chǔ)一些臨時(shí)性或經(jīng)常要修改的數(shù)據(jù)型雳,例如/tmp和/var目錄当凡,這樣既避免了對(duì)Flash存儲(chǔ)器的讀寫(xiě)損耗,也提高了數(shù)據(jù)讀寫(xiě)速度纠俭。
Ramfs/tmpfs相對(duì)于傳統(tǒng)的Ramdisk的不同之處主要在于:不能格式化宁玫,文件系統(tǒng)大小可隨所含文件內(nèi)容大小變化。
Tmpfs的一個(gè)缺點(diǎn)是當(dāng)系統(tǒng)重新引導(dǎo)時(shí)會(huì)丟失所有數(shù)據(jù)柑晒。
3. 網(wǎng)絡(luò)文件系統(tǒng)NFS (Network File System)
NFS是由Sun開(kāi)發(fā)并發(fā)展起來(lái)的一項(xiàng)在不同機(jī)器、不同操作系統(tǒng)之間通過(guò)網(wǎng)絡(luò)共享文件的技術(shù)眷射。在嵌入式Linux系統(tǒng)的開(kāi)發(fā)調(diào)試階段匙赞,可以利用該技術(shù)在主機(jī)上建立基于NFS的根文件系統(tǒng),掛載到嵌入式設(shè)備妖碉,可以很方便地修改根文件系統(tǒng)的內(nèi)容涌庭。
以上討論的都是基于存儲(chǔ)設(shè)備的文件系統(tǒng)(memory-based file system),它們都可用作Linux的根文件系統(tǒng)欧宜。實(shí)際上坐榆,Linux還支持邏輯的或偽文件系統(tǒng)(logical or pseudo file system),例如procfs(proc文件系統(tǒng))冗茸,用于獲取系統(tǒng)信息席镀,以及devfs(設(shè)備文件系統(tǒng))和sysfs,用于維護(hù)設(shè)備文件夏漱。