成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

運維 系統運維
嵌入式系統與通用PC機不同,一般沒有硬盤這樣的存儲設備而是使用Flash閃存芯片、小型閃存卡等專為嵌入式系統設計的存儲裝置,本文分析了嵌入式系統中常用的存儲設備及其管理機制,介紹了常用的基于FLASH的文件系統類型。

嵌入式系統與通用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類型的設備。

#p#

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

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

【編輯推薦】

  1. Linux系統下配置Netware服務器方法
  2. 嵌入式設備上的 Linux 系統開發
  3. 深度介紹Linux內核是如何工作的(1)
責任編輯:張燕妮 來源: zol.com
相關推薦

2010-01-21 09:15:05

Linux嵌入式文件系

2010-06-29 09:55:41

嵌入式Linux文件系統

2022-11-24 11:15:49

IoTLinux設備樹機制

2021-12-19 22:34:45

Linux容器系統

2022-01-03 23:33:40

Linux組件系統

2011-01-14 13:13:23

嵌入式Linux開發

2020-07-03 07:00:00

Linux組件

2011-01-06 15:11:09

嵌入式linux

2011-04-25 10:25:43

OpenEmbedde嵌入式Linux

2017-12-21 10:43:44

Linux嵌入式終端

2009-04-11 15:22:24

Linux 2.6內核應用

2020-06-15 07:00:00

Linux嵌入式系統

2009-12-09 10:12:28

嵌入式Linux

2009-12-16 15:41:40

嵌入式Linux入門

2009-12-17 10:33:05

嵌入式Linux

2012-07-30 14:13:11

Linux 2.6內核嵌入式

2009-06-26 16:05:04

嵌入式Linux

2011-03-17 17:36:01

iptables嵌入式Linux

2021-04-13 08:06:17

分布式HDFS存儲大型數據

2023-04-27 07:06:18

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品少妇一区二区三区在线播放 | 国产91丝袜在线播放 | 国产视频福利在线观看 | 亚洲欧美自拍偷拍视频 | 欧美一区二区成人 | 国产精品久久久久久久久久久久久久 | 国内精品视频免费观看 | 成人三级在线观看 | 精品综合| 精品综合久久 | 超碰地址| 浮生影院免费观看中文版 | 91精品国产综合久久久久久丝袜 | 久久国产欧美日韩精品 | 亚洲午夜精品一区二区三区他趣 | 四虎在线播放 | 日韩免费一区 | 蜜臀久久99精品久久久久野外 | 97起碰| 亚洲一区精品在线 | 亚洲一区二区三区免费在线观看 | 麻豆一区二区三区 | 操久久 | 国产精品久久久久久久午夜 | 日本成人午夜影院 | 成人激情视频在线观看 | 美女福利视频网站 | 中文字幕不卡在线观看 | 日韩一区二区三区四区五区六区 | 国产精品久久片 | 一区二区三区视频在线观看 | 欧美亚洲日本 | 亚洲成人日韩 | 国产精品永久在线观看 | 精品一区二区三区免费视频 | 日韩av一区二区在线观看 | 精品成人| 一级片视频免费观看 | av入口 | 欧美一级在线观看 | 欧美精品 在线观看 |