嵌入式Linux開(kāi)發(fā)環(huán)境的搭建之:嵌入式開(kāi)發(fā)環(huán)境的搭建
5.1.5Linux內核源碼目錄結構
Linux內核源碼的目錄結構如圖5.24所示。
n /include子目錄包含了建立內核代碼時(shí)所需的大部分包含文件,這個(gè)模塊利用其他模塊重建內核。
n /init子目錄包含了內核的初始化代碼,這里的代碼是內核工作的起始入口。
n /arch子目錄包含了所有處理器體系結構特定的內核代碼。如:arm、i386、alpha。
n /drivers子目錄包含了內核中所有的設備驅動(dòng)程序,如塊設備和SCSI設備。
n /fs子目錄包含了所有的文件系統的代碼,如:ext2、vfat等。
n /net子目錄包含了內核的網(wǎng)絡(luò )相關(guān)代碼。
n /mm子目錄包含了所有內存管理代碼。
n /ipc子目錄包含了進(jìn)程間通信代碼。
n /kernel子目錄包含了內核核心代碼。
5.1.6制作文件系統
讀者把上一節中所編譯的內核壓縮映像下載到開(kāi)發(fā)板后會(huì )發(fā)現,系統在進(jìn)行了一些初始化的工作之后,并不能正常啟動(dòng),如圖5.25所示。
可以看到,系統啟動(dòng)時(shí)發(fā)生了加載文件系統的錯誤。要記住,上一節所編譯的僅僅是內核,文件系統和內核是完全獨立的兩個(gè)部分。讀者可以回憶一下第2章講解的Linux啟動(dòng)過(guò)程的分析(嵌入式Linux是Linux裁減后的版本,其精髓部分是一樣的),其中在head.S中就加載了根文件系統。因此,加載根文件系統是Linux啟動(dòng)中不可缺少的一部分。本節將講解嵌入式Linux中文件系統的制作方法。
圖5.25系統啟動(dòng)錯誤
制作文件系統的方法有很多,可以從零開(kāi)始手工制作,也可以在現有的基礎上添加部分內容并加載到目標板上去。由于完全手工制作工作量比較大,而且也很容易出錯,因此,本節將主要介紹把現有的文件系統加載到目標板上的方法,主要包括制作文件系統映像和用NFS加載文件系統的方法。
1.制作文件系統映像
讀者已經(jīng)知道,Linux支持多種文件系統,同樣,嵌入式Linux也支持多種文件系統。雖然在嵌入式系統中,由于資源受限的原因,它的文件系統和PC機Linux的文件系統有較大的區別,但是,它們的總體架構是一樣的,都是采用目錄樹(shù)的結構。在嵌入式系統中常見(jiàn)的文件系統有cramfs、romfs、jffs、yaffs等,這里就以制作cramfs文件系統為例進(jìn)行講解。cramfs文件系統是一種經(jīng)過(guò)壓縮的、極為簡(jiǎn)單的只讀文件系統,因此非常適合嵌入式系統。要注意的是,不同的文件系統都有相應的制作工具,但是其主要的原理和制作方法是類(lèi)似的。
在嵌入式Linux中,busybox是構造文件系統最常用的軟件工具包,它被非常形象地稱(chēng)為嵌入式Linux系統中的“瑞士軍刀”,因為它將許多常用的Linux命令和工具結合到了一個(gè)單獨的可執行程序(busybox)中。雖然與相應的GNU工具比較起來(lái),busybox所提供的功能和參數略少,但在比較小的系統(例如啟動(dòng)盤(pán))或者嵌入式系統中已經(jīng)足夠了。busybox在設計上就充分考慮了硬件資源受限的特殊工作環(huán)境。它采用一種很巧妙的辦法減少自己的體積:所有的命令都通過(guò)“插件”的方式集中到一個(gè)可執行文件中,在實(shí)際應用過(guò)程中通過(guò)不同的符號鏈接來(lái)確定到底要執行哪個(gè)操作。例如最終生成的可執行文件為busybox,當為它建立一個(gè)符號鏈接ls的時(shí)候,就可以通過(guò)執行這個(gè)新命令實(shí)現列出目錄的功能。采用單一執行文件的方式最大限度地共享了程序代碼,甚至連文件頭、內存中的程序控制塊等其他系統資源都共享了,對于資源比較緊張的系統來(lái)說(shuō),真是最合適不過(guò)了。在busybox的編譯過(guò)程中,可以非常方便地加減它的“插件”,最后的符號鏈接也可以由編譯系統自動(dòng)生成。
下面用busybox構建FS2410開(kāi)發(fā)板的cramfs文件系統。
首先從busybox網(wǎng)站下載busybox源碼(本實(shí)例采用的busybox-1.0.0)并解壓,接下來(lái),根據實(shí)際需要進(jìn)行busybox的配置。
[root@localhostfs2410]#tarjxvfbusybox-1.00.tar.bz2
[root@localhostfs2410]#cdbusybox-1.00
[root@localhostbusybox-1.00]#makedefconfig/*首先進(jìn)行默認配置*/
[root@localhostbusybox-1.00]#makemenuconfig
此時(shí)需要設置平臺相關(guān)的交叉編譯選項,操作步驟為:先選中“BuildOptions”項的“DoyouwanttobuildBusyboxwithaCrossComplier?”選項,然后將“CrossCompilerprefix”設置為“/usr/local/arm/3.3.2/bin/arm-linux-”(這是在實(shí)驗主機中的交叉編譯器的安裝路徑)。
圖5.26busybox配置畫(huà)面
下一步編譯并安裝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 )建的文件系統還缺少很多東西。下面我們通過(guò)創(chuàng )建系統所需要的目錄和文件來(lái)完善一下文件系統的內容。
[root@localhostcramfs]#mkdirmntrootvartmpprocbootetclib
[root@localhostcramfs]#mkdir/var/{lock,log,mail,run,spool}
如果busybox是動(dòng)態(tài)編譯的(即在配置busybox時(shí)沒(méi)選中靜態(tài)編譯),則把所需的交叉編譯的動(dòng)態(tài)鏈接庫文件復制到lib目錄中。
linux相關(guān)文章:linux教程
評論