<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ò) 收藏

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

          (1)、Busybox 是 Debian GNU/Linux 的大名鼎鼎的 Bruce Perens 首先開發(fā)的。Busybox 編譯出一個(gè)單個(gè)的獨(dú)立執(zhí)行程序,就叫做 busybox。但是它可以根據(jù)配置,執(zhí)行 ash shell的功能,以及幾十個(gè)各種小應(yīng)用程序的功能。這其中包括有一個(gè)迷你的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

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

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

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

          Installation Options
          [*] don’t use /usr

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

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

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

          (3)、拷貝應(yīng)用程序運(yùn)行時(shí)所需要的庫到/lib,庫文件可以從PC機(jī)上的交叉編譯工具安裝目錄下拷貝,如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)換成一個(gè)映象文件,創(chuàng)建Cramfs文件系統(tǒng)需要mkcramfs工具,mkcramfs能把相應(yīng)的Cramfs目錄樹壓縮成為單一的映象文件,這個(gè)映象文件就是我們需要移植的文件系統(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)容,被壓縮成一個(gè)1.08Mbytes的文件系統(tǒng)映象文件,通過vivi或測(cè)試程序?qū)⑵鋵懭隖lash中就可以驗(yàn)證是否移植成功。

          五、小結(jié)

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

          創(chuàng)新點(diǎn):

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

          參考文獻(xiàn):

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

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

          3、 王集森、劉昊、胡晨,嵌入式Linux中多文件系統(tǒng)的構(gòu)建[J],單片機(jī)與應(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òng)引導(dǎo)實(shí)現(xiàn)的分析[J],微計(jì)算機(jī)信息,2005,8-2,50-52頁

          作者簡(jiǎn)介:

          盧劍翔(1978-),男,廣西玉林人,西南科技大學(xué)在讀碩士研究生;主要研究方向:嵌入式操作系統(tǒng)。

          劉成安(1965-),男,西南科技大學(xué)副教授,碩士生導(dǎo)師;主要研究方向:開發(fā)與應(yīng)用。

          胡和智(1976-),男,陜西商南人,河北工業(yè)大學(xué)廊坊分院教師,主要研究方向:集成電路設(shè)計(jì)與制造。

          劉振剛(1981-),男,山東青島,西南科技大學(xué)在讀碩士研究生;主要研究方向:控制理論與控制工程。


          上一頁 1 2 下一頁

          評(píng)論


          相關(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); })();