嵌入式系統與通用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中。
另外,它的速度快,效率高,其唯讀的特點有利於保護檔案系統免受破壞,提高了系統的可靠性;但是它的唯讀屬性同時又是它的一大缺陷,使得使用者無法對其內容對進擴充。cramfs映像通常是放在flash中,但是也能放在別的檔案系統裡,使用loopback裝置可以把它安裝別的檔案系統裡。使用mkcramfs工具可以建立cramfs映像。
● ramfs/tmpfs
ramfs也是linus torvalds開發的,ramfs檔案系統把所有的檔案都放在ram裡執行,通常是flash系統用來儲存一些臨時性或經常要修改的資料,相對於ramdisk來說,ramfs的大小可以隨著所含檔案內容大小變化,不像ramdisk的大小是固定的。tmpfs是基於記憶體的檔案系統,因為tmpfs駐留在ram 中,所以寫/讀操作發生在ram 中。tmpfs檔案系統大小可隨所含檔案內容大小變化,使得能夠最理想地使用記憶體;tmpfs駐留在ram,所以讀和寫幾乎都是瞬時的。tmpfs的乙個缺點是當系統重新引導時會丟失所有資料。
● jffs2
jffs2是redhat公司基於jffs開發的快閃儲存器檔案系統,最初是針對redhat公司的嵌入式產品ecos開發的嵌入式檔案系統,所以jffs2也可以用在linux,uclinux中。jffs檔案系統最早是由瑞典axis communications公司基於linux2.0的核心為嵌入式系統開發的檔案系統。jffs2是乙個可讀寫的、壓縮的、日誌型檔案系統,並提供了崩潰/掉電安全保護,克服了jffs的一些缺點:使用了基於雜湊表的日誌節點結構,大大加快了對節點的操作速度;支援資料壓縮;提供了「寫平衡」支援;支援多種節點型別;提高了對快閃儲存器的利用率,降低了記憶體的消耗。這些特點使jffs2檔案系統成為目前flash裝置上最流行的檔案系統格式,它的缺點就是當檔案系統已滿或接近滿時,jffs2執行會變慢,這主要是因為碎片收集的問題。
● yaffs
yaffs/yaffs2是一種和jffsx類似的快閃儲存器檔案系統,它是專為嵌入式系統使用nand型快閃儲存器而設計的一種日誌型檔案系統。和jffs2相比它減少了一些功能,所以速度更快,而且對記憶體的占用比較小。此外,yaffs自帶nand晶元的驅動,並且為嵌入式系統提供了直接訪問檔案系統的api,使用者可以不使用linux中的mtd與vfs,直接對檔案系統操作。yaffs2支援大頁面的nand裝置,並且對大頁面的nand裝置做了優化。jffs2在nand快閃儲存器上表現並不穩定,更適合於nor快閃儲存器,所以相對大容量的nand快閃儲存器,yaffs是更好的選擇。
在具體的嵌入式系統設計中可根據不同目錄存放的內容不同以及存放的檔案屬性,確定使用何種檔案系統。
嵌入式Linux檔案系統及其儲存機制分析
華清遠見 嵌入式系統與通用pc機不同,一般沒有硬碟這樣的儲存裝置而是使用flash快閃儲存器晶元 小型快閃儲存器卡等專為嵌入式系統設計的儲存裝置,本文分析了嵌入式系統中常用的儲存裝置及其管理機制,介紹了常用的基於flash的檔案系統型別。1 嵌入式系統儲存裝置及其管理機制分析 構建適用於嵌入式系統的...
嵌入式Linux檔案系統及其儲存機制分析
嵌入式linux檔案系統及其儲存機制分析 華清遠見嵌入式學院 嵌入式系統與通用pc機不同,一般沒有硬碟這樣的儲存裝置而是使用flash快閃儲存器晶元 小型快閃儲存器卡等專為嵌入式系統設計的儲存裝置,本文分析了嵌入式系統中常用的儲存裝置及其管理機制,介紹了常用的基於flash的檔案系統型別。1 嵌入式...
嵌入式Linux檔案系統及其儲存機制分析
嵌入式系統與通用pc機不同,一般沒有硬碟這樣的儲存裝置而是使用flash快閃儲存器晶元 小型快閃儲存器卡等專為嵌入式系統設計的儲存裝置,本文分析了嵌入式系統中常用的儲存裝置及其管理機制,介紹了常用的基於flash的檔案系統型別。1 嵌入式系統儲存裝置及其管理機制分析 構建適用於嵌入式系統的linux...