嵌入式檔案系統移植

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

嵌入式檔案系統移植

  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儲存器.