當前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]根文件系統(tǒng)是構(gòu)建一個uCLinux嵌入式系統(tǒng)的重要組成部分。目前嵌入式系統(tǒng)可以選擇的根文件系統(tǒng)有:Romfs、CramFS、Ramfs、Jffs2、Ext2等等,本系統(tǒng)采用CramFS作為uCLinux嵌入式系統(tǒng)的只讀根文件系統(tǒng)。本文討論了CramFS文件系統(tǒng)的特點,并詳細的說明了Nor Flash上建立一個uClinux的Cramfs根文件系統(tǒng)的一般步驟。

根文件系統(tǒng)是構(gòu)建一個uCLinux嵌入式系統(tǒng)的重要組成部分。目前嵌入式系統(tǒng)可以選擇的根文件系統(tǒng)有:Romfs、CramFS、Ramfs、Jffs2、Ext2等等,本系統(tǒng)采用CramFS作為uCLinux嵌入式系統(tǒng)的只讀根文件系統(tǒng)。本文討論了CramFS文件系統(tǒng)的特點,并詳細的說明了Nor Flash上建立一個uClinux的Cramfs根文件系統(tǒng)的一般步驟。

一、引言

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

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

本系統(tǒng)采用的是宿主機+目標板的開發(fā)模式,宿主機為PC+Cygwin1.5.1 ,目標板為采用203MHz的ARM920T內(nèi)核的處理器S3C2410x+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ū);將CramFS文件系統(tǒng)映象文件燒入18-35扇區(qū)。

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

CramFS(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)用于嵌入式系統(tǒ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)的支持。

4.2、 拷貝需要加入的其他文件和鏈接庫

(1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先開發(fā)的。Busybox 編譯出一個單個的獨立執(zhí)行程序,就叫做 busybox。但是它可以根據(jù)配置,執(zhí)行 ash shell的功能,以及幾十個各種小應(yīng)用程序的功能。這其中包括有一個迷你的vi編輯器,系統(tǒng)不可或缺的/sbin/init程序,以及其他諸如 ifconfig, halt, reboot, mkdir, mount, ln, ls, echo, cat等等。而所有這一切功能卻只有區(qū)區(qū)1M左右的大小,Busybox已經(jīng)成為構(gòu)建嵌入式Linux文件系統(tǒng)的必備軟件。

首先我們從官方網(wǎng)站(http://www.busybox.org/)上下載BusyBox 的版本1.0.0。

#tar xvfz busybox-1.00.tar.gz
#cd busybox-1.00
#make menuconfig

下面是需要編譯進busybox的功能選項,其他的可以根據(jù)需要自選。

Build Options
[*] Build BusyBox as a static binary (no shared libs)

這個選項是一定要選擇的,這樣才能把busybox編譯成靜態(tài)鏈接的可執(zhí)行文件,運行時才獨立于其他函數(shù)庫,否則必需要其他庫文件才能運行,在單個linux內(nèi)核不能使他正常工作。
[*] Do you want to build BusyBox with a Cross Compiler
選擇你自己定義的交叉編譯環(huán)境。

Installation Options
[*] don’t use /usr

這個選項也一定要選,否則make install 后busybox將安裝在原系統(tǒng)的/usr下,這將覆蓋系統(tǒng)原有的命令。選擇這個選項后,make install后會在busybox目錄下生成一個叫_install的目錄,里面有busybox和指向他的鏈接。

其他選項都是一些linux基本命令選項,自己需要哪些命令就編譯進去,一般用默認的就可以了,配置好后退出并保存。編譯BusyBox,如果能成功編譯BusyBox,就將編譯好的busybox 復(fù)制到CramFS文件系統(tǒng)的/bin 目錄下,然后創(chuàng)建常用命令的建立快捷方式。建立快捷方式很簡單,只要建一個符號鏈接,比方ln -s /bin/busybox /bin/ls,那么,執(zhí)行/bin/ls的時候,busybox 就會執(zhí)行l(wèi)s的功能,也會按照ls的方式處理命令行參數(shù)。

(2)、拷貝一些管理員控制程序到/sbin目錄下,最重要的就是要包含一個init命令,可以使用busybox提供的系統(tǒng)工具。比如 ln -s /bin/busybox /sbin/init,這樣我們就有了系統(tǒng)運行不可或缺的 /sbin/init 程序了。

(3)、拷貝應(yīng)用程序運行時所需要的庫到/lib,庫文件可以從PC機上的交叉編譯工具安裝目錄下拷貝,如libc-2.2.2.so、libcryt-2.2.2.so、libm-2.2.2.so、libutil-2.2.2.so等,為部分相應(yīng)庫建立快捷方式,提供一些應(yīng)用程序按快捷方式名稱調(diào)用。值得注意的是C庫要采用C庫的版本glibc, glibc位于/lib/libc.so.6。

4.3 、利用mkcramfs工具生成cramfs壓縮文件系統(tǒng)

一般情況下都要把已經(jīng)規(guī)劃好的目錄結(jié)構(gòu)轉(zhuǎn)換成一個映象文件,創(chuàng)建Cramfs文件系統(tǒng)需要mkcramfs工具,mkcramfs能把相應(yīng)的Cramfs目錄樹壓縮成為單一的映象文件,這個映象文件就是我們需要移植的文件系統(tǒng)。Mkcramfs的命令格式為:

Mkcramfs [-h] [--e edition] [-I file] [-n name] DirName OutFile

#mkcramfs root cramfs.Img

用以上的命令就可以生成我們需要的cramfs文件系統(tǒng)映象文件,我們可以發(fā)現(xiàn)原本為2.36Mbytes大小的目錄內(nèi)容,被壓縮成一個1.08Mbytes的CramFS文件系統(tǒng)映象文件, 通過vivi或測試程序?qū)⑵鋵懭隖lash中就可以驗證是否移植成功。

五、小結(jié)

CramFS是一個壓縮格式的文件系統(tǒng),如果系統(tǒng)存儲資源比較緊張的話,采用CramFS作為嵌入式Linux系統(tǒng)的根文件系統(tǒng)是一個不錯的選擇。

創(chuàng)新點:

由于嵌入式系統(tǒng)的內(nèi)存資源比較緊張, 采用CramFS作為嵌入式Linux系統(tǒng)的根文件系統(tǒng)是一種解決內(nèi)存資源緊張的比較可行的方法。本文討論了在嵌入式Linux系統(tǒng)中構(gòu)建CramFS文件系統(tǒng)的詳細過程,為解決內(nèi)存資源緊張?zhí)峁┮环N參考。

參考文獻:

1、 李巖、榮盤祥,基于S3C44B0X嵌入式Uclinux系統(tǒng)的原理及應(yīng)用[M],清華大學(xué)出版社,2005。

2、 ARM 9 Linux實驗教程,深圳市英蓓特信息技術(shù)有限公司[M],2005。

3、 王集森、劉昊、胡晨,嵌入式Linux中多文件系統(tǒng)的構(gòu)建[J],單片機與嵌入式系統(tǒng)應(yīng)用,2005 12,12-15頁。

4、 周宏霖,CramFS在Linux嵌入式環(huán)境的應(yīng)用,http://www.lee-1.com/hlchou/LinuxCramFS.htm

5、 郝淑鳳等,基于ARM的uCLinux啟動引導(dǎo)實現(xiàn)的分析[J],微計算機信息,2005,8-2,50-52頁

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫毥谦F公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動 BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運行,同時企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險,如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機 衛(wèi)星通信

要點: 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅持高質(zhì)量發(fā)展策略,塑強核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運營商 數(shù)字經(jīng)濟

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動力信息技術(shù)(集團)股份有限公司(以下簡稱"軟通動力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉