免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

linux2.6內(nèi)核Makefile簡(jiǎn)單語(yǔ)法與應(yīng)用

 iceberg_horn 2009-05-05
linux2.6內(nèi)核Makefile簡(jiǎn)單語(yǔ)法與應(yīng)用來(lái)源: 作者: 時(shí)間:2008-10-06 Tag: 點(diǎn)擊: 401 1.1 概述
2.6的Makefile的寫法和應(yīng)用相對(duì)于2.4有了一些變化,可能對(duì)于很多人來(lái)說(shuō),因?yàn)檎也坏较嚓P(guān)的文檔,都是模仿內(nèi)核中已有的文件來(lái)寫自己的Makefile。其實(shí),在內(nèi)核的Documentation / kbuild目錄下面,還是有對(duì)內(nèi)核Makefile語(yǔ)法的詳細(xì)說(shuō)明的。在這里就2.6內(nèi)核中Makefile最常見(jiàn)的簡(jiǎn)單應(yīng)用情況做一個(gè)翻譯和歸納介紹。
2.6內(nèi)核的Makefile分為5個(gè)組成部分:
l 最頂層的Makefile
l 內(nèi)核的.config配置文件
l 在arch/$(ARCH) 目錄下的體系結(jié)構(gòu)相關(guān)的Makefile
l 在scripts/ 目錄下的 Makefile.* 文件,是一些Makefile的通用規(guī)則
l 各級(jí)目錄下的大概約500個(gè)kbuild Makefile文件
頂層的Makefile文件讀取 .config文件的內(nèi)容,并總體上負(fù)責(zé)build內(nèi)核和模塊。Arch Makefile則提供補(bǔ)充體系結(jié)構(gòu)相關(guān)的信息。 Scripts目錄下的Makefile文件包含了所有用來(lái)根據(jù)kbuild Makefile 構(gòu)建內(nèi)核所需的定義和規(guī)則。
1.2 Kbuild Makefile
對(duì)于Makefiles的不同組成部分,有一些不同的語(yǔ)法規(guī)則。針對(duì)的對(duì)象也不同,對(duì)于大部分內(nèi)核模塊或設(shè)備驅(qū)動(dòng)的開(kāi)發(fā)者和使用者來(lái)說(shuō),最常接觸到的就是各層目錄下基于kbuild架構(gòu)的kbuild Makefile文件。
Kbuild Makefile的語(yǔ)法結(jié)構(gòu)非常簡(jiǎn)單,核心內(nèi)容主要包括
1.2.1 目標(biāo)定義
目標(biāo)定義就是用來(lái)定義哪些內(nèi)容要做為模塊編譯,哪些要編譯鏈接進(jìn)內(nèi)核。
例如
obj-y += foo.o
表示要由foo.c或者foo.s文件編譯得到foo.o并鏈接進(jìn)內(nèi)核,而obj-m則表示該文件要作為模塊編譯。 除了y,m以外的obj-x形式的目標(biāo)都不會(huì)被編譯。
而更常見(jiàn)的做法是根據(jù).config文件的CONFIG_ 變量來(lái)決定文件的編譯方式,如:
obj-$(CONFIG_ISDN) += isdn.o
obj-$(CONFIG_ISDN_PPP_BSDCOMP) += isdn_bsdcomp.o
除了obj-形式的目標(biāo)以外,還有l(wèi)ib-y library庫(kù),hostprogs-y 主機(jī)程序等目標(biāo),但是基本都應(yīng)用在特定的目錄和場(chǎng)合下。
1.2.2 多文件模塊的定義
最簡(jiǎn)單的kbuild Makefile如上一節(jié)一句話的形式就夠了,如果一個(gè)模塊由多個(gè)文件組成,那么稍微復(fù)雜一些,采用模塊名加 –objs后綴或者 –y后綴的形式來(lái)定義模塊的組成文件。如以下例子:
obj-$(CONFIG_EXT2_FS) += ext2.o
ext2-y := balloc.o bitmap.o
ext2-$(CONFIG_EXT2_FS_XATTR) += xattr.o
模塊的名字為ext2,由balloc.o和bitmap.o兩個(gè)目標(biāo)文件最終鏈接生成ext2.o 直至ext2.ko文件,是否包括xattr.o取決于內(nèi)核配置文件的配置情況。如果CONFIG_EXT2_FS的值是y也沒(méi)有關(guān)系,在此過(guò)程中生成的 ext2.o將被鏈接進(jìn)built-in.o最終鏈接進(jìn)內(nèi)核。這里需要注意的一點(diǎn)是,該kbuild Makefile所在的目錄中不應(yīng)該再包含和模塊名相同的源文件如ext2.c/ext2.s。
或者寫成如-objs的形式:
obj-$(CONFIG_ISDN) += isdn.o
isdn-objs := isdn_net_lib.o isdn_v110.o isdn_common.o
1.2.3 目錄層次的迭代
如下例:
obj-$(CONFIG_EXT2_FS) += ext2/
如果CONFIG_EXT2_FS 的值為y或m,kbuild將會(huì)將ext2目錄列入向下迭代的目標(biāo)中,但是其作用也僅限于此,具體ext2目錄下的文件是要作為模塊編譯還是鏈入內(nèi)核,還是有ext2目錄下的Makefile文件的內(nèi)容來(lái)決定的。
1.2.4 模塊的編譯
編譯模塊的時(shí)候,你可以將模塊放在代碼樹(shù)中,用Make modules的方式來(lái)編譯你的模塊,你也可以將模塊相關(guān)文件目錄放在代碼樹(shù)以外的位置,用如下命令來(lái)編譯模塊:
make -C path/to/kernel/src M=$PWD modules
-C指定代碼樹(shù)的位置,M=$PWD 或 M=`PWD` 告訴kbuild回到當(dāng)前目錄來(lái)執(zhí)行build操作。
1.2.5 模塊的安裝
當(dāng)你需要將模塊安裝到非默認(rèn)位置的時(shí)候,你可以用INSTALL_MOD_PATH 指定一個(gè)前綴,如:
make INSTALL_MOD_PATH=/foo modules_install
模塊將被安裝到 /foo/lib/modules目錄下
本文來(lái)自: (www.) 詳細(xì)出處參考:http://www./html/article/kernel/20081006/13450.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多