新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > uClinux系統平臺下的Flash存儲技術

        uClinux系統平臺下的Flash存儲技術

        作者: 時間:2016-10-08 來源:網絡 收藏

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

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

        uClinux的塊驅動器(Block Driver)

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

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

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

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

        通過上面的比較可以看到,MTD driver提供對Flash最有力的支持,同時它也支持從Flash上直接運行文件系統,譬如JFFS和JFFS2,而Blkmem driver則不能夠支持。

        根文件系統(Root Filesystem)

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

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

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

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

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

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

        Flash工具及實例

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

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

        實際設計實例:

        系統硬件配置: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 出廠設置信息

        3 32K mtd3 空閑

        4 64K mtd4 固化設置

        5

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

        35

        0-35 2048K mtd6 all of Flash memory

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

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

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

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



        關鍵詞:

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 万荣县| 赣州市| 紫云| 崇文区| 宁远县| 尖扎县| 华容县| 都兰县| 呼伦贝尔市| 平果县| 彭阳县| 屏东市| 巴里| 涿鹿县| 古交市| 太原市| 新和县| 那坡县| 万载县| 都安| 荔波县| 涪陵区| 赣榆县| 敖汉旗| 梁河县| 遂宁市| 通化市| 张家界市| 德阳市| 正定县| 金寨县| 西畴县| 高邮市| 瑞昌市| 财经| 滦南县| 江阴市| 灯塔市| 郸城县| 资溪县| 樟树市|