嵌入式Linux的檔案系統及其儲存機制分析

來源:互聯網
上載者:User

//來源不詳

嵌入式系統與通用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是更好的選擇。

  在具體的嵌入式系統設計中可根據不同目錄存放的內容不同以及存放的檔案屬性,確定使用何種檔案系統

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.