久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

linux中.config,makefile,kconfig

 北漂之鄔 2014-02-25
1.頂層
頂層的Makefile文檔讀取內(nèi)核配置文件.config文檔的內(nèi)容.遞歸向下訪問子目錄的形式完成build內(nèi)核和模塊的工作,。
.config文件的內(nèi)容是在makemenuconfig的時(shí)候,通過Kconfig文檔配置的結(jié)果.arch/$(ARCH)/Makefile則提供補(bǔ)充體
系結(jié)構(gòu)相關(guān)的信息,;
2.內(nèi)核中的kconfig
每個(gè)Kconfig分別描述了所屬目錄源文件相關(guān)的內(nèi)核配置菜單,。
Kconfig  語法結(jié)構(gòu)
每個(gè)菜單項(xiàng)都有一個(gè)關(guān)鍵字標(biāo)識(shí),最常見的就是config,。
語法:
config symbol
options
symbol就是新的菜單項(xiàng),,options是在這個(gè)新的菜單項(xiàng)下的屬性和選項(xiàng)
其中options部分有:
(1)類型定義:
每個(gè)config菜單項(xiàng)都要有類型定義,bool:布爾類型,,tristate三態(tài):內(nèi)建,、模塊、移除,, string:字符串,,hex:十六進(jìn)制, integer:整型
例如   configHELLO_MODULE
                bool"hello testmodule"
bool類型的只能選中或不選中,,tristate類型的菜單項(xiàng)多了編譯成內(nèi)核模塊的選項(xiàng),,假如選擇編譯成內(nèi)核模塊,則會(huì)在.config中生成一個(gè)
CONFIG_HELLO_MODULE=m的配置,,假如選擇內(nèi)建,,就是直接編譯成內(nèi)核影響,就會(huì)在.config中生成一個(gè)CONFIG_HELLO_MODULE=y的配置.
(2)依賴型定義dependson或requires
指此菜單的出現(xiàn)是否依賴于另一個(gè)定義
     configHELLO_MODULE
             bool"hello testmodule"
             dependsonARCH_PXA
這個(gè)例子表明HELLO_MODULE這個(gè)菜單項(xiàng)只對(duì)XScale處理器有效,,即只有在選擇了ARCH_PXA,,該菜單才可見(可配置)。
(3)幫助性定義
只是增加幫助用關(guān)鍵字help或---help--
3.makefile的內(nèi)容
(1)目標(biāo)定義
目標(biāo)定義就是用來定義哪些內(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ì)被編譯,。而更常見的做法是根據(jù).config文件的CONFIG_
變量來決定文件的編譯方式(該變量如何起作用見文末另一篇文章的鏈接),如:
obj-$(CONFIG_EXT2) += ext2.o
除了obj-形式的目標(biāo)以外,,還有l(wèi)ib-y library庫,,hostprogs-y 主機(jī)程序等目標(biāo),但是基本都應(yīng)用在特定的目錄和場(chǎng)合下,。
(2)多文件模塊的定義
最簡(jiǎn)單的kbuild Makefile如上一節(jié)一句話的形式就夠了,,如果一個(gè)模塊由多個(gè)文件組成,那么稍微復(fù)雜一些,,采用模塊名加 –objs后綴或者 –y后綴的形式來定義模塊的組成文件,。如以下例子:
obj-$(CONFIG_EXT2) += ext2.o
ext2-y := balloc.o bitmap.o
或者寫成如-objs的形式:
obj-$(CONFIG_EXT2) += ext2.o
ext2-objs := balloc.o bitmap.o
模塊的名字為ext2,如果CONFIG_EXT2的值是m,,由balloc.o和bitmap.o兩個(gè)目標(biāo)文件最終鏈接生成ext2.o 直至ext2.ko文件,,如果CONFIG_EXT2的值是y,生成的 ext2.o將被鏈接進(jìn)built-in.o最終鏈接進(jìn)內(nèi)核,。
(3)目錄層次的迭代
如下例:
obj-$(CONFIG_EXT2) += ext2/
如果CONFIG_EXT2 的值為y或m,,kbuild將會(huì)將ext2目錄列入向下迭代的目標(biāo)中。
4.多文件makefile和kconfig
#CONFIG_ECAT_DRV為m時(shí)編譯為模塊,,為y時(shí)編進(jìn)內(nèi)核  ecat.o為最終鏈接的目標(biāo)文件
obj-$(CONFIG_ECAT_DRV) += ecat.o 
#-objs指定依賴的多個(gè).o文件 這些文件都對(duì)應(yīng)相應(yīng)的.c文件
ecat-objs := ecateoe.o eoeappl.o mcihw.o ecatslv.o mailbox.o ecatappl.o ecat2440.o 
本地Kconfig
#建立一個(gè)本地子目錄,。“”為顯示的目錄名字 
menu "ecat driver here"      
    depends on NET  #依賴于上層的某個(gè)開關(guān) 
config ECAT_DRV  #配置變量名,,必須和Makefile中的變量后半段一樣  
    bool "ecat driver" #bool量,, 顯示的名字 
    ---help---  #下面為要顯示的幫助文字 
        This is test for ecat. 
endmenu  #本地子目錄結(jié)束
 上層Makefile
*#添加下面這一句 
obj-$(CONFIG_ECAT_DRV) += ecat/  #打開下一級(jí)目錄編譯 
上層Kconfig
*#添加下面這一句 
source "driver/xxx/ecat/Kconfig" 
#導(dǎo)入子文件夾中的Kconfig文件,可以為相對(duì)路徑 

    本站是提供個(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)論公約

    類似文章 更多