新聞中心

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

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

        作者: 時間:2013-09-13 來源:網絡 收藏


        本文引用地址:http://www.104case.com/article/257141.htm

        5.1.5Linux內核源碼目錄結構

        Linux內核源碼的目錄結構如圖5.24所示。


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

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

        n /arch子目錄包含了所有處理器體系結構特定的內核代碼。如:arm、i386、alpha。

        n /drivers子目錄包含了內核中所有的設備驅動程序,如塊設備和SCSI設備。

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

        n /net子目錄包含了內核的網絡相關代碼。

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

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

        n /kernel子目錄包含了內核核心代碼。


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

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


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


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


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


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

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


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


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

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

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

        [root@localhostfs2410]#cdbusybox-1.00

        [root@localhostbusybox-1.00]#makedefconfig/*首先進行默認配置*/

        [root@localhostbusybox-1.00]#makemenuconfig


        此時需要設置平臺相關的選項,操作步驟為:先選中“BuildOptions”項的“DoyouwanttobuildBusyboxwithaCrossComplier?”選項,然后將“CrossCompilerprefix”設置為“/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用于指定安裝目錄,如果不設置該選項,則默認在當前目錄下創(chuàng)建_install目錄。創(chuàng)建的安裝目錄的內容如下所示:


        [root@localhostcramfs]#ls

        binlinuxrcsbinusr


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


        [root@localhostcramfs]#mkdirmntrootvartmpprocbootetclib

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


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

        linux相關文章:linux教程




        評論


        相關推薦

        技術專區(qū)

        關閉
        主站蜘蛛池模板: 清苑县| 健康| 达州市| 永靖县| 西青区| 万宁市| 太原市| 揭东县| 永川市| 米泉市| 进贤县| 阜阳市| 綦江县| 花垣县| 海南省| 滁州市| 蛟河市| 富蕴县| 清镇市| 公安县| 敖汉旗| 格尔木市| 天津市| 师宗县| 无为县| 治多县| 小金县| 顺义区| 岳池县| 兰坪| 诏安县| 屯门区| 馆陶县| 三台县| 五家渠市| 搜索| 阿巴嘎旗| 淮安市| 浙江省| 长春市| 嘉定区|