<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

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

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

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

          一、引言

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

          文件系統(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)的特點(diǎn),并詳細(xì)的說明了Nor Flash上建立一個(gè)uClinux的Cramfs的一般步驟。

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

          本系統(tǒng)采用的是宿主機(jī)+目標(biāo)板的開發(fā)模式,宿主機(jī)為PC+Cygwin1.5.1 ,目標(biāo)板為采用203MHz的ARM920T內(nèi)核的處理器x+uClinux, uClinux版本為2.4.18。在宿主機(jī)上將uClinux和應(yīng)用程序編譯后,下載到目標(biāo)板的Nor Flash中,啟動(dòng)運(yùn)行。使用的SDRAM是2片16MB的HY57v561620,工作在16bit雙字節(jié)模式下;使用的Flash是2片AMD AM29LV160DB,大小為2M字節(jié),工作在16bit雙字節(jié)模式下。在開發(fā)的時(shí)候,將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任職時(shí),所參與開發(fā)的文件系統(tǒng)。它是針對Linux內(nèi)核2.4之后的版本所設(shè)計(jì)的一種新型只讀文件系統(tǒng),采用了 zlib 壓縮,壓縮比一般可以達(dá)到1:2,但仍可以作到高效的隨機(jī)讀取,Linux系統(tǒng)中,通常把不需要經(jīng)常修改的目錄壓縮存放,并在系統(tǒng)引導(dǎo)的時(shí)候再將壓縮文件解開。因?yàn)镃ramfs不會(huì)影響系統(tǒng)的讀取文件的速度,而且是一個(gè)高度壓縮的文件系統(tǒng)。因此非常廣泛應(yīng)用于中。

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

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

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

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

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

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

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

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

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

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

          /proc 系統(tǒng)狀態(tài)文件目錄,目錄中的文件可以用于訪問有關(guān)內(nèi)核的狀態(tài)、計(jì)算機(jī)的屬性、正在運(yùn)行的進(jìn)程的狀態(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)核時(shí)把支持CramFS的選項(xiàng)加入。盡管uCLinux可以以模塊的形式加載各種類型的設(shè)備驅(qū)動(dòng)上,但我們選擇直接把設(shè)備驅(qū)動(dòng)及CramFS文件系統(tǒng)靜態(tài)地編譯進(jìn)內(nèi)核中。

          在Memory Technology Devices (MTD)選項(xiàng)中進(jìn)行配置:

          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選項(xiàng)中進(jìn)行配置:

          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)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();