<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > uClinux系統平臺下的Flash存儲技術(shù)

uClinux系統平臺下的Flash存儲技術(shù)

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

Bootloader使一段單獨的代碼,它用以負責基本硬件的初始化過(guò)程,并且加載和運行uClinux的內核代碼。作為系統啟動(dòng)工具,Bootloader經(jīng)過(guò)配置以后可以加載Flash中多內核,甚至可以通過(guò)串口和網(wǎng)口來(lái)加載內核和系統的鏡像到RAM中運行。Bootloader同時(shí)也提供對內核鏡像文件的多級別保護,這一點(diǎn)對于以Flash作為存儲設備的系統來(lái)說(shuō)尤為重要。譬如,當系統進(jìn)行內核升級和重要數據備份時(shí)候,系統突然掉電,正如PC機進(jìn)行BIOS刷寫(xiě)過(guò)程中的掉電一樣,都是災難性的。但是利用Bootloader就可以實(shí)現保護性的恢復。

目前運行在uClinux上的免費Bootloader有COLILO、MRB、PPCBOOT和DBUG。也有為特殊需求設計的SNAP GEAR和ARCTURUS NETWORKS。

uClinux的塊驅動(dòng)器(Block Driver)

對于嵌入式系統的塊設備可選擇存儲文件系統的塊驅動(dòng)器主要有三種選擇。

1)Blkmem driver。Blkmem driver仍是uClinux上使用最普遍的Flash驅動(dòng)器,它是為uClinux而設計的,但是相對的它的結構比較簡(jiǎn)單并且僅支持NOR Flash的操作,需要在RAM中建立根文件系統。同時(shí)它也很難配置,需要代碼修改表來(lái)建立Flash分區。盡管如此,它還是提供了最基本的分區擦/寫(xiě)操作。

2)MTD driver。MTD driver是Linux下標準的Flash驅動(dòng)器。它支持大多數Flash存儲設備,兼有功能強大的分區定義和映象工具。借用交叉存取技術(shù)(interleaving),MTD driver甚至可支持同一系統中不同類(lèi)型的Flash,Linux內核中關(guān)于MTD driver配置有較為詳細的選項。

3)RAM disk driver。在無(wú)盤(pán)啟動(dòng)的標準Linux中用的最多的就實(shí)RAM disk driver,但它不支持底層的Flash存儲器,僅對根文件系統的建立有意義,即壓縮的根文件系統壓縮以后存放在Flash的什么地方。

通過(guò)上面的比較可以看到,MTD driver提供對Flash最有力的支持,同時(shí)它也支持從Flash上直接運行文件系統,譬如JFFS和JFFS2,而B(niǎo)lkmem driver則不能夠支持。

根文件系統(Root Filesystem)

uClinux中的文件系統可以有很多種選擇。通常情況下ROMfs是使用最多的文件系統,它是一種簡(jiǎn)單、緊湊和只讀的文件系統。ROMfs順序存儲文件數據,并可以在uClinux支持地存儲設備上直接運行文件系統,這樣可以在系統運行時(shí)節省許多RAM空間。

Cramfs是針對Llinux內核2.4之后的版本所設計的一種新型文件系統,它也是壓縮和只讀格式的。它主要的優(yōu)點(diǎn)是將文件數據以壓縮形式存儲,在需要運行的時(shí)候進(jìn)行解壓縮。由于它存儲的文件形式是壓縮的格式,所以文件系統不能直接在Flash上運行。雖然這樣可以節約很多Flash存儲空間,但是文件系統運行需要將大量的數據拷貝進(jìn)RAM中,消耗了RAM空間。

考慮到有多數系統需要讀/寫(xiě)的文件系統,可以使用MTD driver的諸如JFFS和JFFS2日志式文件格式在Flash頭部建立根文件系統。日志式文件系統可以免受系統突然掉電的危險,并且在下一次系統引導時(shí)不需要文件系統的檢查。由于JFFS和JFFS2文件格式是特別為Flash存儲器設計的,二者都具有一種稱(chēng)為“損耗平衡”的特點(diǎn),也就是說(shuō)Flash的所有被擦寫(xiě)的單元都保持相同的擦寫(xiě)次數。利用這種特有的保護措施,Flash的使用周期得到相當大的提升。JFFS2使用了壓縮的文件格式,為Flash節省了大量的存儲空間,它更優(yōu)于JFFS格式在系統中使用。值得注意的是,使用JFFS2格式可能帶來(lái)少量的Flash空間的浪費,這主要是由于日志文件的過(guò)度開(kāi)銷(xiāo)和用于回收系統的無(wú)用存儲單元,浪費的空間大小大致是兩個(gè)數據段。

如果使用RAM disk,一般應選擇EXT2文件格式。但EXT2并不是一種特別高效的文件存儲空間。由于存在在RAM disk上,所以任何改變在下一次啟動(dòng)后都會(huì )丟失。當然,也有許多人認為對于嵌入式存儲空間來(lái)講,這是一種優(yōu)勢,因為每次系統啟動(dòng)都是從已知的文件系統狀態(tài)開(kāi)始的。

雖然在Linux下有許多的文件格式可供選擇,但是對于uClinux一般只選擇上述的幾種文件格式。另外一點(diǎn)就是如何在目標系統上建立根文件系統。大致步驟如下:

首先在開(kāi)發(fā)宿主機上建立一個(gè)目標機的根文件系統的目錄樹(shù),然后利用嵌入式根文件系統生成工具在宿主機上生成目錄樹(shù)的二進(jìn)制文件鏡像,最后下載到目標機上就可以了。對于不同的文件格式有不同的二進(jìn)制鏡像生成工具,譬如JFFS的mkfs.jffs2、ISO9660的mkisofs。

Flash工具及實(shí)例

uClinux下的Flash的操作工具有很多種,它們都是為底層的塊設備而設計使用的。

當使用MTD driver時(shí),主要的工具有:erase(數據段擦除工具)、eraseall(擦除Flash)、lock(寫(xiě)保護)、unlock(打開(kāi)寫(xiě)保護)、mkfs.jffs(從目錄結構生成JFFS格式文件工具)和mkfs.jffs2(JFFS2格式生成工具)。由于MTD driver提供字符和塊設備支持,所以在目標機上可以使用諸如dd命令來(lái)寫(xiě)Flash。

實(shí)際設計實(shí)例:

系統硬件配置:S3C4510B,2M Flash,4M SDRAM。內核:uClinux2.4.x,使用MTD driver支持Flash存儲。文件系統格式選擇ROMfs。在Flash存儲器的地址底部存在一系列的大小不等的可擦除的地址空間,它們的大小分別是16K、8K、8K和32K,總計大小為64K ,我們選擇Flash的“bottom boot”。

Flash 分區如下

● SEGMENT SIZE MTD-DEVICE DESCRIPTION

0 16K mtd0 boot loader

1 8K mtd1 內核引導參數

2 8K mtd2 出廠(chǎng)設置信息

3 32K mtd3 空閑

4 64K mtd4 固化設置

5

. 1984K mtd5 內核+根文件系統 .

35

0-35 2048K mtd6 all of Flash memory

在Flash分區的過(guò)程中,盡量使用Flash的頂部和底部。不同的MTD分區可以部分重疊,但是在操作時(shí)要特別注意。

系統內核是壓縮存儲的,Bootloader在初始化SDRAM后就解壓內核到SDRAM中運行。根文件系統存儲在壓縮的內核鏡像文件之后的,它可以直接在Flash上運行,移除內核壓縮鏡像后,典型的根文件系統的大小約有1.5M左右。

內核文件和根文件系統合并在一個(gè)鏡像文件中有一個(gè)最大的好處就是當二者需要升級的時(shí)候,只需要重新編譯MTD4上的配置文件即可。

在所有配置中關(guān)鍵是MTD驅動(dòng)器映射的建立, uClinux-2.4.x/drivers/mtd/maps下的nettle-uc.c是文件系統建立的源程序,其主要是解釋了分區映射的內容和在MTD4上如何配置根文件系統。



關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>