新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 基于s3c2410的CramFS根文件系統(tǒng)的移植

基于s3c2410的CramFS根文件系統(tǒng)的移植

作者: 時間:2012-05-21 來源:網(wǎng)絡(luò) 收藏

一、引言

隨著電子產(chǎn)業(yè)的不斷發(fā)展,基于ARM技術(shù)的系統(tǒng)設(shè)計和開發(fā)平臺越來越多地在控制類、消費類、通信類等電子產(chǎn)品中廣泛應(yīng)用。從軟件角度上看,構(gòu)建基于ARM技術(shù)的uClinux系統(tǒng)要涉及到引導(dǎo)加載程序、Linux 內(nèi)核、文件系統(tǒng)、用戶應(yīng)用程序幾部分的設(shè)計。

文件系統(tǒng)是操作系統(tǒng)中用來管理用戶文件的內(nèi)核軟件層。文件可能存在于磁盤、網(wǎng)絡(luò)或者是一些虛擬的文件。文件系統(tǒng)包括和建立于內(nèi)存設(shè)備之上文件系統(tǒng)。是uClinux系統(tǒng)的核心部分,包含系統(tǒng)使用的軟件和庫,以及所有用來為用戶提供支持架構(gòu)和用戶使用的應(yīng)用軟件,并作為存儲數(shù)據(jù)讀寫結(jié)果的區(qū)域。由于嵌入式設(shè)備中Flash資源很緊張,如何有效地使用有限的存儲空間是嵌入式開發(fā)者必須考慮的,合適的文件系統(tǒng)格式是解決這一問題的關(guān)鍵所在。本文討論了只讀壓縮文件系統(tǒng)的特點,并詳細的說明了Nor Flash上建立一個uClinux的Cramfs的一般步驟。

二、開發(fā)環(huán)境簡介

本系統(tǒng)采用的是宿主機+目標板的開發(fā)模式,宿主機為PC+Cygwin1.5.1 ,目標板為采用203MHz的ARM920T內(nèi)核的處理器x+uClinux, uClinux版本為2.4.18。在宿主機上將uClinux和應(yīng)用程序編譯后,下載到目標板的Nor Flash中,啟動運行。使用的SDRAM是2片16MB的HY57v561620,工作在16bit雙字節(jié)模式下;使用的Flash是2片AMD AM29LV160DB,大小為2M字節(jié),工作在16bit雙字節(jié)模式下。在開發(fā)的時候,將Boot Loader燒入AM29LV160DB的1-5扇區(qū);將Linux內(nèi)核映象文件zImage燒入6-17扇區(qū);將文件系統(tǒng)映象文件燒入 18-35扇區(qū)。

三、 Cramfs文件系統(tǒng)簡介

(Compressed Rom File System)是Linux Torvalds在Transmeta任職時,所參與開發(fā)的文件系統(tǒng)。它是針對Linux內(nèi)核2.4之后的版本所設(shè)計的一種新型只讀文件系統(tǒng),采用了 zlib 壓縮,壓縮比一般可以達到1:2,但仍可以作到高效的隨機讀取,Linux系統(tǒng)中,通常把不需要經(jīng)常修改的目錄壓縮存放,并在系統(tǒng)引導(dǎo)的時候再將壓縮文件解開。因為Cramfs不會影響系統(tǒng)的讀取文件的速度,而且是一個高度壓縮的文件系統(tǒng)。因此非常廣泛應(yīng)用于中。

在嵌入式的環(huán)境之下,內(nèi)存和外存資源都需要節(jié)約使用。如果使用RAMDISK方式來使用文件系統(tǒng),那么在系統(tǒng)運行之后,首先要把Flash上的映像文件解壓縮到內(nèi)存中,構(gòu)造起RAMDISK環(huán)境,才可以開始運行程序。但是它也有很致命的弱點。在正常情況下,同樣的代碼不僅在Flash中占據(jù)了空間 (以壓縮后的形式存在),而且還在內(nèi)存中占用了更大的空間(以解壓縮之后的形式存在),這違背了嵌入式環(huán)境下盡量節(jié)省資源的要求。
使用CramFS文件系統(tǒng)就是一種解決這個問題的方式。CramFS是一個壓縮格式的文件系統(tǒng),它并不需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓縮到內(nèi)存之中,而只是在系統(tǒng)需要訪問某個位置的數(shù)據(jù)的時候,馬上計算出該數(shù)據(jù)在CramFS中的位置,將它實時地解壓縮到內(nèi)存之中,然后通過對內(nèi)存的訪問來獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。CramFS中的解壓縮以及解壓縮之后的內(nèi)存中數(shù)據(jù)存放位置都是由CramFS文件系統(tǒng)本身進行維護的,用戶并不需要了解具體的實現(xiàn)過程,因此這種方式增強了透明度,對開發(fā)人員來說,既方便,又節(jié)省了存儲空間。

一個完整的cramfs文件系統(tǒng)通常包含以下幾個目錄:

/linuxrc 啟動腳本文件,由Boot Loader核心命令行確定init=/linuxrc,加載/etc目錄為ramfs,(cramfs為只讀文件系統(tǒng)),拷貝/mnt/etc到 /etc,配置文件目錄重新加載根文件系統(tǒng)和/etc文件系統(tǒng),執(zhí)行init進程。

/bin 引導(dǎo)啟動所需的命令或用戶可能用的命令。

/sbin 系統(tǒng)管理員服務(wù)程序,其中最重要的是供內(nèi)核初始化之后執(zhí)行的/sbin/init進程,系統(tǒng)啟動時由init解釋并運行/etc/inittab, inittab將指導(dǎo)int去調(diào)用一個系統(tǒng)初始化程序/etc/init.d/rcS。

/etc 特定機器的配置文件以及用戶數(shù)據(jù)存放目錄,其中的所有內(nèi)容是在內(nèi)核運行后,由linuxrc 從/mnt/etc拷貝得到的。

/lib 文件系統(tǒng)上的程序所需的動態(tài)庫。

/dev 驅(qū)動程序存放目錄,可以在這里存放自己編寫的驅(qū)動程序。

/usr 用于存放用戶程序和配置文件的目錄,可以根據(jù)需要進行設(shè)置。目錄下的/usr/etc/rc.local執(zhí)行本地所需要的初始化,如安裝核心模塊,進行網(wǎng)絡(luò),運行應(yīng)用程序,啟動圖形界面等。/etc/modules.conf在系統(tǒng)運行期間自動加載模塊。

/mnt 用于設(shè)備安裝的目錄。/mnt/etc/init.d/rcS完成各個文件系統(tǒng)的Mount,執(zhí)行/usr/etc/rc.local;通過rcS可以調(diào)動dhcp程序配置網(wǎng)絡(luò)。rcS執(zhí)行完以后,就會打開Shell。

/proc 系統(tǒng)狀態(tài)文件目錄,目錄中的文件可以用于訪問有關(guān)內(nèi)核的狀態(tài)、計算機的屬性、正在運行的進程的狀態(tài)等信息。盡管 /proc 中的文件是虛擬的,但它們?nèi)钥梢允褂萌魏挝募庉嬈骰蛳?more', 'less'或 'cat'這樣的程序來查看。

四、 Cramfs文件系統(tǒng)的移植過程

文件系統(tǒng)是緊跟uCLinux內(nèi)核放置,由內(nèi)核加載,主要存放用戶應(yīng)用程序和配置信息。CramFS文件系統(tǒng)的基本組成:初始化程序、Shell程序以及其他Linux常用工具、配置文件、鏈接庫、圖形界面程序和用戶應(yīng)用程序等。本節(jié)將介紹移植CramFS文件系統(tǒng)的具體操作方法。

4.1、在內(nèi)核中加入對CramFS文件系統(tǒng)支持

想要在系統(tǒng)中提供CramFS的能力,我們必須要在編輯uCliunx內(nèi)核時把支持CramFS的選項加入。盡管uCLinux可以以模塊的形式加載各種類型的設(shè)備驅(qū)動上,但我們選擇直接把設(shè)備驅(qū)動及CramFS文件系統(tǒng)靜態(tài)地編譯進內(nèi)核中。

在Memory Technology Devices (MTD)選項中進行配置:

Memory Technology Device (MTD) support[Y/m/n/?] Y 內(nèi)存技術(shù)設(shè)備支持

MTD partitioning support [Y/m/n/?] Y 支持MTD分區(qū)

Direct char device access to MTD devices[Y/m/n/?] Y MTD字符設(shè)備直接訪問

Caching block device access to MTD devices[Y/m/n/?] Y MTD塊設(shè)備緩沖訪問

在File Systems選項中進行配置:

Compressed ROM file system support [Y/m/n/?] Y ROM文件系統(tǒng)的支持

完成上述修改并編譯后,完成uCliunx內(nèi)核對CramFS文件系統(tǒng)的支持。


上一頁 1 2 下一頁

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉