(結合工程實踐選題調研分析同類軟件產品)
一.文件系統簡介
在計算機中,文件系統是命名文件及放置文件的邏輯存儲和恢復的系統。通俗的來說文件系統管理着很多文件也就是數據,這些數據又是存儲在磁盤上的,因此實質上文件系統是管理磁盤的軟件系統。一方面文件系統對磁盤空間進行統一規划,另外一方面文件系統提供給普通用戶人性化的接口,通過更加形象的方式將磁盤中的數據展示給用戶。
現如今被大家PC機上所常用的操作系統如Windows、Linux都有文件系統,文件都被放置進目錄(Windows中的文件夾)或子目錄,在樹狀結構中你希望的位置中。除了PC機上掛載的本地文件系統,如Ext4、XFS、FAT32和Btrfs等文件系統之外,還有一些文件系統彌補了這些文件系統只能在本地進行磁盤格式化、使用的“缺陷”,例如分布式文件系統和集群文件系統,他們通過實現多個客戶端同時訪問同一服務端來解決資源共享的問題。
本篇文章將針對嵌入式文件系統做詳細介紹!
二.嵌入式文件系統
嵌入式文件系統由桌面文件系統發展而來,但由於嵌入式設備工作環境的多樣性,對文件系統的穩定性、安全性等方面有了更高的要求。因此嵌入式文件系統雖然繼承了通用文件系統的組織結構,同時又有着自己的一些特點:
- 文件系統占用資源應盡可能小
- 滿足可移動和便於攜帶的需求
- 滿足斷電后的數據完整性保護
- 支持多種存儲設備、可伸縮、可剪裁、可移植等特點
如下圖所示,Linux 文件系統結構由 4 層組成,自上到下分別是用戶層、內核層、驅動層和硬件層。用戶層為用戶提供一個操作接口,內核層實現了各種文件系統,驅動層是塊設備的驅動程序,硬件層是嵌入式系統使用的幾種存儲器。
為了對各類文件系統進行統一管理,Linux 引入了虛擬文件系統 VFS,為各類文件系統提供統一的操作和API。
在嵌入式 Linux 應用中,主要的硬件存儲設備為 RAM(DRAM,SDRAM)和 ROM(常采用 Flash 存儲器)。
注:MTD(Memeory Technology Device,存儲技術設備):針對Flash做的底層驅動程序)
根據存儲設備的不同,可以將嵌入式文件系統划分為三大類:基於flash的文件系統,基於內存的文件系統,基於網絡的文件系統。
1.基於FLASH的文件系統
閃存主要有NOR和NAND兩種技術,比較常用的文件系統有jffs2,yaffs2,logfs,ubifs。傳統的文件系統如ext2、ext3、ntfs等都是針對機械式硬盤設計的,用作Fash文件系統會很多的弊端。
對於一塊Flash芯片可以被划分為多個分區,各分區可以采用不同的文件系統;兩塊Flash芯片也可以合並為一個分區使用,采用一個文件系統。即文件系統是針對於存儲器分區而言的,而非存儲芯片。
-- jffs2:Journalling Flash FileSystem
jffs2是一個開放源碼的項目,是用於微型嵌入式設備的原始閃存芯片的實際文件系統。其功能就是管理在MTD設備上實現的日志型文件系統,主要用於NOR型閃存,基於MTD驅動層。jffs2文件系統是可讀寫的、支持數據壓縮的、基於哈希表的日志型文件系統,並提供了崩潰/掉電安全保護,提供“寫平衡”支持等。缺點主要是當文件系統已滿或接近滿時,因為垃圾收集的關系而使jffs2的運行速度大大放慢。
-- yaffs:Yet Another Flash File System
yaffs/yaffs2是專為嵌入式系統使用NAND型閃存而設計的一種日志型文件系統。與jffs2相比,它減少了一些功能(例如不支持數據壓縮),所以速度更快,掛載時間很短,對內存的占用較小。另外,它還是跨平台的文件系統,除了Linux和eCos,還支持WinCE, pSOS和ThreadX等。yaffs/yaffs2自帶NAND芯片的驅動,並且為嵌入式系統提供了直接訪問文件系統的API,用戶可以不使用Linux中的MTD與VFS,直接對文件系統操作。當然,yaffs也可與MTD驅動程序配合使用。缺點就是沒有采用壓縮的文件格式,當包含的內容相同時, yaffs2 鏡像文件要比jffs2 鏡像文件大。
-- Cramfs:Compressed ROM File System
它也基於MTD驅動程序。在cramfs文件系統中,每一頁(4KB)被單獨壓縮,可以隨機頁訪問,其壓縮比高達2:1,為嵌入式系統節省大量的Flash存儲空間,使系統可通過更低容量的FLASH存儲相同的文件,從而降低系統成本。
Cramfs在嵌入式系統中應用廣泛,但是它的只讀屬性同時又是它的一大缺陷,使得用戶無法對其內容對進擴充。
-- Romfs
傳統型的Romfs文件系統是一種簡單的、緊湊的、只讀的文件系統,不支持動態擦寫保存,按順序存放數據,因而支持應用程序以XIP(eXecute In Place,片內運行)方式運行,在系統運行時,節省RAM空間。uClinux系統通常采用Romfs文件系統。
其他文件系統:fat/fat32也可用於實際嵌入式系統的擴展存儲器(例如PDA, Smartphone, 數碼相機等的SD卡),這主要是為了更好的與最流行的Windows桌面操作系統相兼容。ext2也可以作為嵌入式Linux的文件系統,不過將它用於FLASH閃存會有諸多弊端。
2.基於RAM的文件系統
-- Ramdisk
Ramdisk是將一部分固定大小的內存當作分區來使用。它並非一個實際的文件系統,而是一種將實際的文件系統裝入內存的機制,並且可以作為根文件系統。將一些經常被訪問而又不會更改的文件(如只讀的根文件系統)通過Ramdisk放在內存中,可以明顯地提高系統的性能。
-- Ramfs/Tmpfs
Ramfs文件系統工作於虛擬文件系統(VFS)層,不能格式化,可以創建多個,在創建時可以指定其最大能使用的內存大小。(實際上,VFS本質上可看成一種內存文件系統,它統一了文件在內核中的表示方式,並對磁盤文件系統進行緩沖。)
Ramfs/Tmpfs文件系統把所有的文件都放在RAM中,所以讀/寫操作發生在RAM中,可以用Ramfs/Tmpfs來存儲一些臨時性或經常要修改的數據,例如/tmp和/var目錄,這樣既避免了對Flash存儲器的讀寫損耗,也提高了數據讀寫速度。
Ramfs/Tmpfs相對於傳統的Ramdisk的不同之處主要在於:不能格式化,文件系統大小可隨所含文件內容大小變化。Tmpfs還有一個缺點是當系統重新引導時會丟失所有數據。
3.網絡文件系統
NFS是由Sun開發並發展起來的一項在不同機器、不同操作系統之間通過網絡共享文件的技術。在嵌入式Linux系統的開發調試階段,可以利用該技術在主機上建立基於NFS的根文件系統,掛載到嵌入式設備,可以很方便地修改根文件系統的內容。
嵌入式文件系統大部分都是開源的資源,開發者們都可以從不同的渠道獲取學習或者開發。生活中離不開嵌入式設備,隨着各種新技術的到來,以及大眾對技術不斷更迭的期望,對嵌入式設備的文件系統也提出了更高的要求,例如更低功耗,更高安全等,期待嵌入式的下一個10年、20年!
參考文檔:
http://www.elecfans.com/emb/20190402898910.html
https://blog.csdn.net/dhy5261302/article/details/64906612