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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 嵌入式Linux開發(fā)環(huán)境的搭建之:嵌入式開發(fā)環(huán)境的搭建

          嵌入式Linux開發(fā)環(huán)境的搭建之:嵌入式開發(fā)環(huán)境的搭建

          作者: 時間:2013-09-13 來源:網(wǎng)絡(luò) 收藏


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

          5.1.5Linux內(nèi)核源碼目錄結(jié)構(gòu)

          Linux內(nèi)核源碼的目錄結(jié)構(gòu)如圖5.24所示。


          n /include子目錄包含了建立內(nèi)核代碼時所需的大部分包含文件,這個模塊利用其他模塊重建內(nèi)核。

          n /init子目錄包含了內(nèi)核的初始化代碼,這里的代碼是內(nèi)核工作的起始入口。

          n /arch子目錄包含了所有處理器體系結(jié)構(gòu)特定的內(nèi)核代碼。如:arm、i386、alpha。

          n /drivers子目錄包含了內(nèi)核中所有的設(shè)備驅(qū)動程序,如塊設(shè)備和SCSI設(shè)備。

          n /fs子目錄包含了所有的文件系統(tǒng)的代碼,如:ext2、vfat等。

          n /net子目錄包含了內(nèi)核的網(wǎng)絡(luò)相關(guān)代碼。

          n /mm子目錄包含了所有內(nèi)存管理代碼。

          n /ipc子目錄包含了進程間通信代碼。

          n /kernel子目錄包含了內(nèi)核核心代碼。


          5.1.6制作文件系統(tǒng)

          讀者把上一節(jié)中所編譯的內(nèi)核壓縮映像下載到開發(fā)板后會發(fā)現(xiàn),系統(tǒng)在進行了一些初始化的工作之后,并不能正常啟動,如圖5.25所示。


          可以看到,系統(tǒng)啟動時發(fā)生了加載文件系統(tǒng)的錯誤。要記住,上一節(jié)所編譯的僅僅是內(nèi)核,文件系統(tǒng)和內(nèi)核是完全獨立的兩個部分。讀者可以回憶一下第2章講解的Linux啟動過程的分析(是Linux裁減后的版本,其精髓部分是一樣的),其中在head.S中就加載了根文件系統(tǒng)。因此,加載根文件系統(tǒng)是Linux啟動中不可缺少的一部分。本節(jié)將講解中文件系統(tǒng)的制作方法。


          圖5.25系統(tǒng)啟動錯誤


          制作文件系統(tǒng)的方法有很多,可以從零開始手工制作,也可以在現(xiàn)有的基礎(chǔ)上添加部分內(nèi)容并加載到目標(biāo)板上去。由于完全手工制作工作量比較大,而且也很容易出錯,因此,本節(jié)將主要介紹把現(xiàn)有的文件系統(tǒng)加載到目標(biāo)板上的方法,主要包括制作文件系統(tǒng)映像和用NFS加載文件系統(tǒng)的方法。


          1.制作文件系統(tǒng)映像

          讀者已經(jīng)知道,Linux支持多種文件系統(tǒng),同樣,也支持多種文件系統(tǒng)。雖然在嵌入式系統(tǒng)中,由于資源受限的原因,它的文件系統(tǒng)和PC機Linux的文件系統(tǒng)有較大的區(qū)別,但是,它們的總體架構(gòu)是一樣的,都是采用目錄樹的結(jié)構(gòu)。在嵌入式系統(tǒng)中常見的文件系統(tǒng)有cramfs、romfs、jffs、yaffs等,這里就以制作cramfs文件系統(tǒng)為例進行講解。cramfs文件系統(tǒng)是一種經(jīng)過壓縮的、極為簡單的只讀文件系統(tǒng),因此非常適合嵌入式系統(tǒng)。要注意的是,不同的文件系統(tǒng)都有相應(yīng)的制作工具,但是其主要的原理和制作方法是類似的。


          在嵌入式Linux中,busybox是構(gòu)造文件系統(tǒng)最常用的軟件工具包,它被非常形象地稱為嵌入式Linux系統(tǒng)中的“瑞士軍刀”,因為它將許多常用的Linux命令和工具結(jié)合到了一個單獨的可執(zhí)行程序(busybox)中。雖然與相應(yīng)的GNU工具比較起來,busybox所提供的功能和參數(shù)略少,但在比較小的系統(tǒng)(例如啟動盤)或者嵌入式系統(tǒng)中已經(jīng)足夠了。busybox在設(shè)計上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過“插件”的方式集中到一個可執(zhí)行文件中,在實際應(yīng)用過程中通過不同的符號鏈接來確定到底要執(zhí)行哪個操作。例如最終生成的可執(zhí)行文件為busybox,當(dāng)為它建立一個符號鏈接ls的時候,就可以通過執(zhí)行這個新命令實現(xiàn)列出目錄的功能。采用單一執(zhí)行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內(nèi)存中的程序控制塊等其他系統(tǒng)資源都共享了,對于資源比較緊張的系統(tǒng)來說,真是最合適不過了。在busybox的編譯過程中,可以非常方便地加減它的“插件”,最后的符號鏈接也可以由編譯系統(tǒng)自動生成。


          下面用busybox構(gòu)建FS2410開發(fā)板的cramfs文件系統(tǒng)。

          首先從busybox網(wǎng)站下載busybox源碼(本實例采用的busybox-1.0.0)并解壓,接下來,根據(jù)實際需要進行busybox的配置。

          [root@localhostfs2410]#tarjxvfbusybox-1.00.tar.bz2

          [root@localhostfs2410]#cdbusybox-1.00

          [root@localhostbusybox-1.00]#makedefconfig/*首先進行默認(rèn)配置*/

          [root@localhostbusybox-1.00]#makemenuconfig


          此時需要設(shè)置平臺相關(guān)的選項,操作步驟為:先選中“BuildOptions”項的“DoyouwanttobuildBusyboxwithaCrossComplier?”選項,然后將“CrossCompilerprefix”設(shè)置為“/usr/local/arm/3.3.2/bin/arm-linux-”(這是在實驗主機中的器的安裝路徑)。


          圖5.26busybox配置畫面

          下一步編譯并安裝busybox。


          [root@localhostbusybox-1.00]#make

          [root@localhostbusybox-1.00]#makeinstallPREFIX=/home/david/fs2410/cramfs


          其中,PREFIX用于指定安裝目錄,如果不設(shè)置該選項,則默認(rèn)在當(dāng)前目錄下創(chuàng)建_install目錄。創(chuàng)建的安裝目錄的內(nèi)容如下所示:


          [root@localhostcramfs]#ls

          binlinuxrcsbinusr


          從此可知,使用busybox軟件包所創(chuàng)建的文件系統(tǒng)還缺少很多東西。下面我們通過創(chuàng)建系統(tǒng)所需要的目錄和文件來完善一下文件系統(tǒng)的內(nèi)容。


          [root@localhostcramfs]#mkdirmntrootvartmpprocbootetclib

          [root@localhostcramfs]#mkdir/var/{lock,log,mail,run,spool}


          如果busybox是動態(tài)編譯的(即在配置busybox時沒選中靜態(tài)編譯),則把所需的的動態(tài)鏈接庫文件復(fù)制到lib目錄中。

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




          評論


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