嵌入式文件系統移植

嵌入式系統是一種“完全嵌入到受控器件內部,爲特定應用而設計的專用計算機系統”。下面是小編整理的嵌入式文件系統移植,希望大家認真閱讀!

嵌入式文件系統移植

  1.1. 計算機組成原理

從馮.諾依曼的存儲程序工作原理及計算機的組成來說,計算機由運算器、控制器、存儲器和輸入/輸出設備五大部件組成。其中運算器和控制器統稱爲中央處理器(CPU),而存儲系統分成內部存儲器(內存)和外部存儲器(外存)。輸入/輸出設備並非計算機所必需的,如果一個設備具有CPU,內存和外存,我們就可以說它是一臺計算機。在很多嵌入式設備上,都沒有輸入/輸出設備,所以從廣義來講,我們的手機,MP3,平板電腦都可以說是一臺計算機。

大家可能都聽說過單片機,那麼什麼是單片機呢?其實單片機就是把CPU,內存和外存集成在一個芯片裏面,當然他還包括其他的一些功能模塊。那麼我們聽說的ARM9,ARM11是不是單片機呢?從嚴格意義上來講,他們並不是單片機,雖說在很多ARM處理器裏面都集成得有一個小容量的SRAM,但是由於CPU內部沒有能夠掉電保存數據的外存,所以它就不是單片機。

  1.1.1. CPU

中央處理器(英文CentralProcessingUnit,CPU)是一臺計算機的運算核心和控制核心,其功能主要是解釋計算機指令以及處理計算機軟件中的數據。CPU由運算器、控制器和寄存器及實現它們之間聯繫的數據、控制及狀態的總線構成。差不多所有的CPU的運作原理可分爲四個階段:提取/取指(Fetch)、解碼(Decode)、執行(Execute)和寫回(Writeback)。 由於CPU的速度很快,而外存的速度很慢,所以CPU不從外存中取出數據,而是從內存或高速緩衝存儲器(cache)中取出指令,放入指令寄存器,並對指令譯碼,並執行指令。

  1.1.2. 存儲器

存儲器是用來存儲程序和數據的部件,對於計算機來說,有了存儲器,纔有記憶功能,才能保證正常工作。存儲器的種類很多,按其用途可分爲主存儲器(簡稱內存或主存)和輔助存儲器(簡稱外存)。內存是電腦中的主要部件,它是相對於外存而言的,其存儲速度快,掉電後數據丟失,是CPU能直接尋址的存儲空間。內存一般採用半導體存儲單元,包括隨機存儲器(RAM)以及高速緩存(CACHE),而RAM是其中最重要的存儲器。在系統上電前,所有的數據都是存放在外存中的,內存中的數據不可使用。當內存中沒有CPU需要的數據時,會使用DMA(相當於一個協處理器)將數據從外存中調入到內存後,再從內存取數據。

l 隨機存儲器(RAM)

RAM(random access memory)隨機存儲器。存儲單元的內容可按需隨意取出或存入,且存取的速度與存儲單元的位置無關的存儲器。這種存儲器在斷電時將丟失其存儲內容,故主要用於存儲短時間使用的程序。 按照存儲信息的不同,隨機存儲器又分爲靜態隨機存儲器(Static RAM,SRAM)和動態隨機存儲器(Dynamic RAM,DRAM)。

SRAM不需要刷新電路即能保存它內部存儲的數據,而DRAM(Dynamic Random Access Memory)每隔一段時間,要刷新充電一次,否則內部的數據即會消失,因此SRAM具有較快的速度和較高的性能,但是SRAM也有它的缺點,即它的集成度較低,相同容量的DRAM內存可以設計爲較小的體積,但是SRAM卻需要很大的體積,且功耗較大。SRAM的速度快但昂貴,一般用小容量的SRAM作爲更高速CPU和較低速DRAM 之間的緩存(cache).

在嵌入式領域,我們常見的DRAM有SDRAM和DDR(DOUBLE DATA RATE)RAM。SDRAM將CPU與RAM通過一個相同的時鐘鎖在一起,使CPU和RAM能夠共享一個時鐘週期,以相同的速度同步工作,每一個時鐘脈衝的上升沿便開始傳遞數據。DDR RAM 是SDRAM的更新換代產品,他允許在時鐘脈衝的上升沿和下降沿傳輸數據,這樣不需要提高時鐘的頻率就能加倍提高SDRAM的速度,在PC上上很常見,另外,很多高端的ARM處理器也支持DDR RAM。

l 高速緩衝存儲器(Cache)

Cache也是我們經常遇到的概念,也就是平常看到的一級緩存(L1 Cache)、二級緩存(L2 Cache)、三級緩存(L3 Cache)這些數據,它位於CPU與內存之間,是一個讀寫速度比內存更快的存儲器。當CPU向內存中寫入或讀出數據時,這個數據也被存儲進高速緩衝存儲器中。當CPU再次需要這些數據時,CPU就從高速緩衝存儲器讀取數據,而不是訪問較慢的內存,當然,如需要的數據在Cache中沒有,CPU會再去讀取內存中的數據。

l 只讀存儲器(ROM)

只讀存儲器(Read-Only Memory)是一種只能讀取資料的存儲器。在製造過程中,將資料以一特製光罩(mask)燒錄於線路中,其資料內容在寫入後就不能更改,所以有時又稱爲“光罩式只讀內存”(mask ROM)。此內存的製造成本較低,常用於電腦中的開機啓動如啓動光盤,在系統裝好的電腦上時,計算機將C盤目錄下的操作系統文件讀取至內存,然後通過cpu調用各種配件進行工作這時系統存放存儲器爲RAM 。這種屬於COMPACT DISC激光唱片,光盤就是這種。

l 可編程程序只讀內存(PROM)

可編程程序只讀內存(Programmable ROM,PROM)之內部有行列式的鎔絲,是需要利用電流將其燒斷,寫入所需的資料,但僅能寫錄一次。 PROM在出廠時,存儲的內容全爲1,用戶可以根據需要將其中的某些單元寫入數據0(部分的PROM在出廠時數據全爲0,則用 戶可以將其中的部分單元寫入1), 以實現對其“編程”的目的。PROM的典型產品是“雙極性熔絲結構”,如果我們想改寫某些單元,則可以給這些單元通以足夠大的電流,並維持一定的時間,原 先的熔絲即可熔斷,這樣就達到了改寫某些位的效果。另外一類經典的PROM爲使用“肖特基二極管”的PROM,出廠時,其中的二極管處於反向截止狀態,還 是用大電流的方法將反相電壓加在“肖特基二極管”,造成其永久性擊穿即可。

l EPROM

可擦出可編程只讀內存(Erasable Programmable Read Only Memory,EPROM)可利用高電壓將資料編程寫入,抹除時將線路曝光於紫外線下,則資料可被清空,並且可重複使用。通常在封裝外殼上會預留一個石英透明窗以方便曝光。

l EEPROM

電可擦出可編程只讀內存(Electrically Erasable Programmable Read Only Memory,EEPROM)之運作原理類似EPROM,但是抹除的方式是使用高電場來完成,因此不需要透明窗。

l FLASH

FLASH表示Flash Memory的意思,即平時所說的“閃存”,全名叫Flash EEPROM Memory。它結合了ROM和RAM的長處,不僅具備電子可擦除可編程(EEPROM)的性能,還可以快速讀取數據(NVRAM的優勢),使數據不會因爲斷電而丟失。U盤和MP3裏用的就是這種存儲器。在過去的20年裏,嵌入式系統一直使用ROM(EPROM)作爲它們的存儲設備,然而近年來Flash全面代替了ROM(EPROM)在嵌入式系統中的地位,用作存儲Bootloader以及操作系統或者程序代碼,或者直接當硬盤使用(U盤)。

  1.2. 嵌入式Flash存儲器

嵌入式硬件系統一般都需要有軟件的支持才能夠正常工作,嵌入式系統需要爲軟件提供相應的存儲空間。在以往的單片機系統內,一般使用ROM(Read Only Memory)或EPROM(Erasable Programmable Read Only Memory)存儲程序。由於現有的嵌入式系統越來越複雜,原有的ROM由於容量、靈活性差等的限制,無法滿足日益複雜的應用要求。

閃存(Flash)是電可擦除只讀存儲器(EEPROM)的變種,但兼有RAM和ROM 的優點,是一種可在系統(In-System)進行電擦寫,掉電後信息不丟失的存儲器,同時它的高集成度和低成本使它成爲市場主流。隨着Flash技術的成熟和普及,一些單片機芯片(如Freescale的8位單片機MC68HC908)已經開始採用片內FLASH取代過去常用的片內ROM或EPROM,使單片機具有了在線編程寫入或擦除的功能。

FLASH在結構和操作方式上與硬盤、EEROM等其他存儲介質有較大區別,他都是隻能將1寫爲0,而不能將0寫成1。所以在Flash編程之前,必須以塊爲單位(塊大小一般爲256KB到20MB)將對應的塊擦除,而擦除的過程就是將所有位都寫爲1的過程,塊內的所有字節變爲0xFF。因此可以說,編程是將相應位寫0的過程,而擦除是將相應位寫1的過程,兩者的執行過程完全相反。而EEPROM能在字節水平上進行刪除和重寫而不是整個芯片擦寫,這樣閃存就比EEPROM的更新速度快。

Flash 芯片是由內部成千上萬個存儲單元組成的,每個單元存儲一個bit。具有低功耗、大容量、擦寫速度快、可整片或分扇區在系統編程(燒寫)、擦除等特點,並且可由內部嵌入的算法完成對芯片的操作,因而在各種嵌入式系統中得到了廣泛的應用。作爲一種非易失性存儲器,Flash在系統中通常用於存放程序代碼、常量表以及一些在系統掉電後需要保存的用戶數據等。常用的Flash爲8位或16位的數據寬度,編程電壓爲單3.3V。主要的生產廠商爲INTEL、ATMEL、AMD、HYUNDAI等。Flash 技術根據不同的應用場合也分爲不同的發展方向,有擅長存儲代碼的NOR Flash和擅長存儲數據的NAND Flash。

  1.3. Norflash和Nandflash的對比

1.3.1. NANDFlash和NORFlash芯片的共性

首先表現在向芯片中寫數據必須先將芯片中對應的內容清空,然後再寫入,即先擦後寫。只不過NORFlash芯片只用擦寫一個字,而NAND需要擦寫整個塊.其次,閃存擦寫的次數都是有限的.當閃存使用接近使用壽命時,經常會出現寫操作失敗;到達使用壽命時,閃存內部存放的數據雖然可以讀,但不能再進行寫操作了.所以爲了防止上面問題的發生,不能對某個特定的區域反覆進行寫操作.通常NANDFlash可擦寫次數高於NORFlash芯片,但是由於NANDFlash通常是整塊擦寫,塊內的頁面中如果有一位失效整個塊就會失效,而且由於擦寫過程複雜,失敗的概率相對較高,所以從整體上來說NOR的壽命較長.

另一個共性是閃存的讀寫操作不僅僅是一個物理操作,實際上在閃存上存放數據必須使用算法實現,這個模塊一般在驅動程序的'(Memory Technology Drivers)模塊中或者在FTLZ (Flash Translation Layer)層內實現,具體算法和芯片的生產廠商以及芯片型號有關係.通過比較可以發現,NAND更適用於複雜的文件應用,但是由於NAND芯片的使用相對複雜,所以對文件系統有較高的要求.

  1.3.2. NANDFlash和NORFlash芯片的不同

(1)閃存芯片讀寫的基本單位不同

應用程序對NorFlash芯片操作以“字”爲基本單位.爲了方便對大容量NorFlash閃存的管理,通常將NOR閃存分成大小爲128KB或64KB的邏輯塊,有時塊內還分扇區.讀寫時需要同時指定邏輯塊號和塊內偏移.應用程序對NandFlash芯片操作是以“塊”爲基本單位閃存的塊比較小,一般是8KB,然後每塊又分成頁,頁大小一般是512字節.要修改NandFlash芯片中一個字節,必須重寫整個數據塊.

(2)NorFlash閃存是隨機存儲介質,用於數據量較小的場合;NandFlash閃存是連續存儲介質,適合存放大的數據.

(3)由於NorFlash地址線和數據線分開,所以NorFlash芯片可以像SDRAM一樣連在數據線上芯片的使用類似於通常內存芯片,傳輸效率高,可執行程序可以在芯片內執行(XI P, eXecute In Place),這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中.由於NorFlash的這個特點,嵌入式系統中經常將NOR芯片做啓動芯片使用Flash共用地址和數據總線,需要額外聯結一些控制的輸入輸出,所以直接將NAND芯片做啓動芯片比較難.

(4)NandFlash閃存芯片因爲共用地址和數據總線的原因,不允許對一個字節甚至一個塊進行的數據清空,只能對一個固定大小的區域進行清零操作;NorFlash芯片可以對字進行操作.所以在處理小數據量的I/O操作的時候的速度要快與NorFlash的速度.比如一塊NorFlash芯片通常寫一個字需要10us,在32位總線上寫512字節需要1280us;NandFlash閃存寫512字節需要的時間包括:512×每字節50ns+10us的尋頁時間+200us的片擦寫時間=234us.

(5)NandFlash閃存的容量比較大,最大容量己達到8G字節.爲了方便管理,NandFlash的存儲空間使用了塊和頁兩級存儲體系,也就是說它的存儲空間是二維的,比如K9F5608UOA閃存塊的大小爲16K,每頁大小是512字節,每頁還16字節空閒區用來存放錯誤校驗碼空間(也稱爲out-of-band,OOB空間).在進行寫操作時,NandFlash閃存每次將一個字節的數據放入內部的緩存區,然後再發出“寫指令”進行寫操作.由於對NandFlash閃存的操作都是以塊和頁爲單位的,所以在向NandFlash閃存進行大量數據的讀寫時,NAND的速度要快於NOR閃存.

(6)NorFlash閃存的可靠性要高於NandFlash閃存,是因爲NorFlash型閃存的接口簡單,數據操作少,位交換操作少,因此可靠性高,極少出現壞區塊,一般用在對可靠性要求高的地方Flash型閃存接口和操作均相對複雜,位交換操作也很多,關鍵性數據更是需安錯誤探測/錯誤更正(EDC/ECC)算法來確保數據的完整性,因此出現問題的機率要大得多,壞區塊也是不可避免的,而且由於壞區塊是隨機分佈的,連糾錯也無法做到.

(7)NANDFlash一般地址線和數據線共用,對讀寫速度有一定影響;NORFlash閃存數據線和地址線分開,相對而言讀寫速度快一些.

(8)接口對比

NorFlash帶有通用的SRAM接口,可以輕鬆地掛接在CPU的地址、數據總線上,對CPU的接口要求低。NorFlash的特點是芯片內執行(XIP,eXecute In Place),這樣應用程序可以直接在flash閃存內運行,不必再把代碼讀到系統RAM中.如uboot中的ro段可以直接在NorFlash上運行,只需要把rw和zi段拷貝到RAM中運行即可.

NandFlash器件使用複雜的I/O口來串行地存取數據,8個引腳用來傳送控制、地址和數據信息。由於時序較爲複雜,所以一般CPU最好集成NandFlash控制器.另外由於NandFlash沒有掛接在地址總線上,所以如果想用NandFlash作爲系統的啓動盤,就需要CPU具備特殊的功能,如s3c2440在被選擇爲NandFlash啓動方式時會在上電時自動讀取NandFlash的4k數據到地址0的SRAM中.如果CPU不具備這種特殊功能,用戶不能直接運行NandFlash上的代碼,那可以採取其他方式,比如好多使用NandFlash的開發板除了使用NandFlash以外,還用上了一塊小的NorFlash來運行啓動代碼.

(9)容量和成本對比

相比起NandFlash來說,NorFlash的容量要小,一般在1~16MByte左右,一些新工藝採用了芯片疊加技術可以把NorFlash的容量做得大一些.在價格方面,NorFlash相比NandFlash來說較高,如目前市場上一片4Mbyte的AM29lv320 NorFlash零售價在20元左右,而一片128MByte的k9f1g08 NandFlash零售價在30元左右. NandFlash生產過程更爲簡單,NAND結構可以在給定的模具尺寸內提供更高的容量,這樣也就相應地降低了價格.

(10)可靠性性對比

NandFlash器件中的壞塊是隨機分佈的,以前也曾有過消除壞塊的努力,但發現成品率太低,代價太高,根本不划算器件需要對介質進行初始化掃描以發現壞塊,並將壞塊標記爲不可用.在已製成的器件中,如果通過可靠的方法不能進行這項處理,將導致高故障率。而壞塊問題在NorFlash上是不存在的.

在Flash的位翻轉(一個bit位發生翻轉)現象上,NAND的出現機率要比NorFlash大得多.這個問題在Flash存儲關鍵文件時是致命的,所以在使用NandFlash時建議同時使用EDC/ECC等校驗算法.

(11)升級對比

NorFlash的升級較爲麻煩,因爲不同容量的NorFlash的地址線需求不一樣,所以在更換不同容量的NorFlash芯片時不方便.通常我們會通過在電路板的地址線上做一些跳接電阻來解決這樣的問題,針對不同容量的NorFlash. 而不同容量的NandFlash的接口是固定的,所以升級簡單.

(12)讀寫性能對比

寫操作:任何flash器件的寫入操作都只能在空或已擦除的單元內進行器件執行擦除操作是十分簡單的,而NOR則要求在進行擦除前先要將目標塊內所有的位都寫爲1.擦除NOR器件時是以64~128KB的塊進行的,執行一個擦除/寫入操作的時間約爲5s.擦除NAND器件是以8~32KB的塊進行的,執行一個擦除/寫入操作最多隻需要4ms. 讀操作:NOR的讀速度比NAND稍快一些.

(13)文件系統比較

Linux系統中採用MTD來管理不同類型的Flash芯片,包括NandFlash和NorFlash.支持在Flash上運行的常用文件系統有cramfs、jffs、jffs2、yaffs、yaffs2等fs文件系統是隻讀文件系統.如果想在Flash上實現讀寫操作,通常在NorFlash上我們會選取jffs及jffs2文件系統,在NandFlash上選用yaffs或yaffs2文件系統s2文件系統支持大頁(大於512字節/頁)的NandFlash存儲器.