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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 嵌入式Linux 的Cramfs 根文件系統(tǒng)配置的解決方案

          嵌入式Linux 的Cramfs 根文件系統(tǒng)配置的解決方案

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

          1 引言

          本文引用地址:http://www.ex-cimer.com/article/151230.htm

            隨著電子產(chǎn)業(yè)的不斷發(fā)展,基于 ARM 技術(shù)的設(shè)計(jì)和開(kāi)發(fā)平臺(tái)越來(lái)越多地在控制 類(lèi)、消費(fèi)類(lèi)、通信類(lèi)等電子產(chǎn)品中廣泛應(yīng)用。從軟件角度上看,構(gòu)建基于ARM 技術(shù)的linux 要涉及到引導(dǎo)加載程序、 內(nèi)核、、用戶應(yīng)用程序幾部分的設(shè)計(jì)。 系統(tǒng)是操作系統(tǒng)中用來(lái)管理用戶的內(nèi)核軟件層。文件可能存在于磁盤(pán)、網(wǎng)絡(luò)或 者是一些虛擬的文件。文件系統(tǒng)包括根文件系統(tǒng)和建立于內(nèi)存設(shè)備之上文件系統(tǒng)。根文件系 統(tǒng)是linux 系統(tǒng)的核心部分,包含系統(tǒng)使用的軟件和庫(kù),以及所有用來(lái)為用戶提供支持架構(gòu) 和用戶使用的應(yīng)用軟件,并作為存儲(chǔ)數(shù)據(jù)讀寫(xiě)結(jié)果的區(qū)域。由于設(shè)備中Flash 資源很 緊張,如何有效地使用有限的存儲(chǔ)空間是開(kāi)發(fā)者必須考慮的,合適的文件系統(tǒng)格式是 解決這一問(wèn)題的關(guān)鍵所在。本文討論了只讀型壓縮 根文件系統(tǒng)的特點(diǎn),并詳細(xì)的說(shuō) 明了NAND FLASH 上建立一個(gè)可讀可寫(xiě)型嵌 根文件系統(tǒng)的新方法。

          2 根文件系統(tǒng)概述

            2.1 Linux根文件系統(tǒng)

            根文件系統(tǒng)不同于普通文件系統(tǒng),它是在內(nèi)核啟動(dòng)時(shí)掛載(mount)的第一個(gè)文件系統(tǒng), 內(nèi)核代碼映像文件保存在根文件系統(tǒng)中,而系統(tǒng)引導(dǎo)啟動(dòng)程序會(huì)在根文件系統(tǒng)掛載之后把一 些基本的初始化腳本和服務(wù)程序等加載到內(nèi)存中。

            Linux 根文件系統(tǒng)是樹(shù)型結(jié)構(gòu)組織[1,3],它包含了內(nèi)核和系統(tǒng)管理所需要的各種文檔和程序等。一般來(lái)說(shuō),根目錄“/”下頂層目錄都有一些比較固定命名和用途,下面列出一

            個(gè)Linux 根文件系統(tǒng)中的比較常見(jiàn)的目錄結(jié)構(gòu)。

            /bin:存放二進(jìn)制可執(zhí)行命令的目錄。

            /dev:存放設(shè)備文件和目錄。

            /etc:存放系統(tǒng)管理和文件和目錄。

            /home:用戶主目錄,比如用戶user 的主目錄就是/home/user,可以用~user 來(lái)表示。

            /lib:存放動(dòng)態(tài)鏈接共享庫(kù)的目錄。

            /sbin:存放系統(tǒng)管理員使用的管理程序的目錄。

            /tmp:公用的臨時(shí)文件存儲(chǔ)點(diǎn)。

            /root:系統(tǒng)管理員的主目錄。

            /mnt:用以臨時(shí)掛載其他的文件系統(tǒng)。

            /proc:虛擬文件系統(tǒng),可直接訪問(wèn)這個(gè)目錄來(lái)獲取系統(tǒng)信息。

            /var:某些大文件溢出區(qū)。

            /usr:存放應(yīng)用程序和文件。

            對(duì)于嵌入式 Linux 系統(tǒng)的根文件系統(tǒng)來(lái)說(shuō),由于受系統(tǒng)資源的限制,一般沒(méi)有上述 那么復(fù)雜,僅保留一些常用的目錄即可。如/bin、/dev、/etc、/lib、/proc、/var、/tmp、/usr、 /mnt 等[2]。 由于嵌入式系統(tǒng)的設(shè)計(jì)冗余度小、系統(tǒng)緊湊,通常存儲(chǔ)容量有限,因此,必須選擇 一個(gè)合適的根文件系統(tǒng)以使系統(tǒng)運(yùn)行最佳。目前,嵌入式Linux 根文件系統(tǒng)主要的根文件系 統(tǒng)類(lèi)型有:Romfs, JFFS2, RAMDISK, YAFFS/YAFFS2, , Squashfs 等[1]。本文主要對(duì) Cramfs 根文件系統(tǒng)進(jìn)行討論。

           2.2 Cramfs根文件系統(tǒng)及其在實(shí)際應(yīng)用中存在的問(wèn)題

            Cramfs 是Linux 的創(chuàng)始人 Linus Torvalds 參與開(kāi)發(fā)的一種只讀的壓縮文件系統(tǒng),它基于 MTD(Memory Technology Device,存儲(chǔ)技術(shù)設(shè)備)驅(qū)動(dòng)程序。在cramfs 文件系統(tǒng)中,每一頁(yè) (4KB)被單獨(dú)壓縮,可以隨機(jī)頁(yè)訪問(wèn),其壓縮比高達(dá)2:1,為嵌入式系統(tǒng)節(jié)省大量的FLASH 存儲(chǔ) 空間,使系統(tǒng)可通過(guò)更低容量的FLASH 存儲(chǔ)相同的文件,從而降低系統(tǒng)成本。

            Cramfs 并不 需要一次性地將文件系統(tǒng)中的所有內(nèi)容都解壓到內(nèi)存中,而只是在系統(tǒng)需要訪問(wèn)某個(gè)位置的 數(shù)據(jù)時(shí),立即計(jì)算出該數(shù)據(jù)在Cramfs 中的位置,將其實(shí)時(shí)地解壓縮到內(nèi)存中,然后通過(guò)對(duì) 內(nèi)存的訪問(wèn)來(lái)獲取文件系統(tǒng)中需要讀取的數(shù)據(jù)。Cramfs 中的解壓縮以及解壓縮之后內(nèi)存中 的數(shù)據(jù)存放位置都是由Cramfs 文件系統(tǒng)本身進(jìn)行維護(hù)的,用戶并不需要了解具體實(shí)現(xiàn)過(guò)程, 因此這種方式增強(qiáng)了透明度,對(duì)開(kāi)發(fā)人員來(lái)說(shuō),既方便又節(jié)省了存儲(chǔ)空間。

            由于 Cramfs 是只讀型文件系統(tǒng),而大多嵌入式應(yīng)用程序需要在臨時(shí)目錄/tmp 進(jìn)行創(chuàng)建 臨時(shí)文件等寫(xiě)操作,如不對(duì)Cramfs 進(jìn)行,則應(yīng)用程序?qū)⒉荒苷_\(yùn)行,導(dǎo)致系統(tǒng)崩潰。 目前,解決些問(wèn)題的方法是復(fù)合文件系統(tǒng)法,即使用YAFFS/YAFFS2 等可寫(xiě)型文件系統(tǒng)與 Cramfs 復(fù)合而成的文件系統(tǒng)作為嵌入式系統(tǒng)的根文件系統(tǒng),使Cramfs 根文件系統(tǒng)啟動(dòng)時(shí)掛 載YAFFS/YAFFS2 文件系統(tǒng),同時(shí)將應(yīng)用程序存放在YAFFS/YAFFS2 文件系統(tǒng)中。這種方 法解決了應(yīng)用程序?qū)Ω募到y(tǒng)的寫(xiě)操作問(wèn)題,但由于在通常的根文件系統(tǒng)之外還增加了一 個(gè)額外的可寫(xiě)型文件系統(tǒng),必然會(huì)增大整個(gè)根文件系統(tǒng)所占的存儲(chǔ)空間,造成嵌入式系統(tǒng)存 儲(chǔ)資源緊張。本文在實(shí)踐的基礎(chǔ)上,通過(guò)對(duì)Linux Cramfs 根文件系統(tǒng)的研究,發(fā)現(xiàn)了一種通 過(guò)修改根文件系統(tǒng)啟動(dòng)腳本和文件來(lái)實(shí)現(xiàn)根文件系統(tǒng)的可讀、可寫(xiě)性的新方法,它不需 要新增額外的文件系統(tǒng)來(lái)支持應(yīng)用程序的讀、寫(xiě)要求,而是利用根文件系統(tǒng)本身的特性來(lái)構(gòu) 造一個(gè)局部可寫(xiě)的根文件系統(tǒng)。

          3 嵌入式Linux 根文件系統(tǒng)的配置

            3.1 Cramfs根文件系統(tǒng)配置文件的分析

            Cramfs 根文件系統(tǒng)中的配置文件存放在/etc 目錄下,有22 個(gè)文件及文件夾,可分為以 下幾類(lèi):

            引導(dǎo)和登錄/注銷(xiāo)類(lèi),包括/etc/issue、/etc/issue.net、/etc/rc.d/rc、/etc/rc.d/rc.local、 /etc/rc.d/rc.sysinit、/etc/rc.d/rc/rcX.d 等文件,它們主要記錄系統(tǒng)的啟動(dòng)信息及運(yùn)行級(jí)別等。

            文件系統(tǒng)類(lèi),包括/etc/mtab、/etc/fstab、/etc/mtools.conf 文件等,它們記錄著系統(tǒng)文 件系統(tǒng)的安裝、卸載信息,系統(tǒng)啟動(dòng)時(shí)可以被安裝的文件系統(tǒng)以及在這些文件系統(tǒng)上所定 義的操作。

            系統(tǒng)管理類(lèi),包括/etc/group、/etc/nologin、/etc/passwd、/etc/rpmrc、/etc/securetty、 /etc/usertty、/etc/shadow、/etc/shells、/etc/motd 等文件,它們記錄著系統(tǒng)用戶和用戶組的登 錄信息、加密后的用戶帳號(hào)密碼信息、用戶組的權(quán)限信息等。

            網(wǎng)絡(luò)類(lèi),包括/etc/gated.conf、/etc/networks、/etc/protocols、/etc/gateway、/etc/services、 /etc/inetd.conf、/etc/sysconfig/netword、/etc/recolv.conf、/etc/rpc、/etc/exports 等文件,它們 記錄著系統(tǒng)對(duì)網(wǎng)絡(luò)接口的配置信息、網(wǎng)絡(luò)服務(wù)程序、網(wǎng)絡(luò)協(xié)議、網(wǎng)絡(luò)文件系統(tǒng)配置等信息。

            系統(tǒng)命令類(lèi),包括/etc/lilo.conf、/etc/logrotate.conf、/et/identd.conf、/etc/ld.so.conf、 /etc/inittab、/etc/termcp 等文件,這些文件記錄著要獨(dú)占地控制系統(tǒng)的系統(tǒng)命令及動(dòng)態(tài)鏈接 程序配置等信息等。

          linux操作系統(tǒng)文章專(zhuān)題:linux操作系統(tǒng)詳解(linux不再難懂)

          linux相關(guān)文章:linux教程



          上一頁(yè) 1 2 3 下一頁(yè)

          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();