嵌入式Linux文件系統及其存儲機制分析

嵌入式系統與通用PC機不一樣,通常沒有硬盤這樣的存儲設備而是使用Flash閃存芯片、小型閃存卡等專爲嵌入式系統設計的存儲裝置
 下面說下關於嵌入式系統中經常使用的存儲設備及其管理機制以及經常使用的基於 FLASH的文件系統類型~~~~~

  1.嵌入式系統存儲設備及其管理機制分析html

  構建適用於嵌入式系統的Linux文件系統,必然會涉及到兩個關鍵點,一是文件系統類型的選擇,它關係到文件系統的讀寫性能、尺寸大小;另外一個就是根文件系統內容的選擇,它關係到根文件系統所能提供的功能及尺寸大小。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中有三種經常使用的塊驅動程序能夠選擇。oop

  ● Blkmem驅動層性能

  Blkmem驅動是爲uclinux專門設計的,也是最先的一種塊驅動程序之一,如今仍然有不少嵌入式Linux操做系統選用它做爲塊驅動程, 尤爲是在uClinux中。它相對來講是最簡單的,並且只支持創建在NOR型Flash和RAM中的根文件系統。使用Blkmem驅動,創建Flash分 區配置比較困難,這種驅動程序爲Flash提供了一些基本擦除/寫操做。優化

   RAMdisk驅動層spa

  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是更好的選擇。

  在具體的嵌入式系統設計中可根據不一樣目錄存放的內容不一樣以及存放的文件屬性,肯定使用何種文件系統。
相關文章
相關標籤/搜索