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

分享

Linux內(nèi)核中的Kconfig、Makefile、.config

 zzjiwang 2016-06-16

         本文參考文章地址:http://hi.baidu.com/donghaozheng/blog/item/02e1b231f0df64a25fdf0eea.html

         本文參考友善之臂的MICRO2440用戶手冊

毛毛同學(xué)今天學(xué)習(xí)了驅(qū)動程序模塊的安裝與卸載,在這個過程中毛毛發(fā)現(xiàn),內(nèi)核的目錄中有許多的Kconfig、Makefile文件,但是毛毛不知道為什么需要這些文件,這些文件又是用來做什么的。下面我們就和陶毛毛同學(xué)一起來學(xué)習(xí)下這些文件的作用是什么。
        首先我們來學(xué)習(xí)什么Makefile,什么是Kconfig ,什么是.config
        Makefile:一個文本形式的文件,其中包含一些規(guī)則告訴make編譯哪些文件以及怎樣編譯這些文件。

         Kconfig:一個文本形式的文件,其中主要作用是在內(nèi)核配置時候,作為配置選項。

         .config:文件是在進(jìn)行內(nèi)核配置的時候,經(jīng)過配置后生成的內(nèi)核編譯參考文件。

Kconfig

1.先了解一下Kconfig的語法:
一個典型的內(nèi)核配置菜單如下:
menu "Network device support"
config NETDEVICES
        bool "Enable Net Devices"
        depends on NET
        default y
       help
               This is help desciption。
...
endmenu
包含在menu/endmenu中的內(nèi)容會成為Network device support的子菜單。每一個子菜單項都是由config來定義的。congfig下方的那些bool、depends on、default、help等為config的屬性,用于定義該菜單項的類型、依賴項、默認(rèn)值、幫助信息等。
2. 補(bǔ)充說明一下類型定義部分:
每個config菜單項都要有類型定義: bool布爾類型、 tristate三態(tài)(內(nèi)建、模塊、移除)、string字符串、 hex十六進(jìn)制、 integer整型。
例如:
config HELLO_MODULE
bool "hello test module"
bool 類型的只能選中或不選中,顯示為[ ]; tristate類型的菜單項多了編譯成內(nèi)核模塊的選項,顯示為< > , 假如選擇編譯成內(nèi)核模塊,則會在.config中生成一個 CONFIG_HELLO_MODULE=m的配置,假如選擇內(nèi)建,就是直接編譯成內(nèi)核影響,就會在.config中生成一個 CONFIG_HELLO_MODULE=y的配置. hex十六進(jìn)制類型顯示為( )。

3. 目錄層次迭代
在Kconfig中有類似語句:source "drivers/usb/Kconfig"
用來包含(或嵌套)新的Kconfig文件,這樣便可以使各個目錄管理各自的配置內(nèi)容,使不必把那些配置都寫在同一個文件里,方便修改和管理。

----------------------------------------------------------------------------------------------

Makefile
2.6內(nèi)核的Makefile分為5個組成部分:
       1. 最頂層的Makefile
       2. 內(nèi)核的.config配置文件
       3.   在arch/$(ARCH) 目錄下的體系結(jié)構(gòu)相關(guān)的Makefile
       4. 在s目錄下的 Makefile.* 文件,是一些Makefile的通用規(guī)則
       5. 各級目錄下的大概約500個kbuild Makefile文件

頂層的Makefile文件讀取 .config文件的內(nèi)容,并總體上負(fù)責(zé)build內(nèi)核和模塊。Arch Makefile則提供補(bǔ)充體系結(jié)構(gòu)相關(guān)的信息。 s目錄下的Makefile文件包含了所有用來根據(jù)kbuild Makefile 構(gòu)建內(nèi)核所需的定義和規(guī)則。

Kbuild Makefile
對于Makefiles的不同組成部分,有一些不同的語法規(guī)則。針對的對象也不同,對于大部分內(nèi)核模塊或設(shè)備驅(qū)動的開發(fā)者和使用者來說,最常接觸到的就是各層目錄下基于kbuild架構(gòu)的kbuild Makefile文件。Kbuild 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)都不會被編譯。而更常見的做法是根據(jù).config文件的CONFIG_ 變量來決定文件的編譯方式(該變量如何起作用見文末另一篇文章的鏈接),如:
obj-$(CONFIG_EXT2) += ext2.o

除了obj-形式的目標(biāo)以外,還有l(wèi)ib-y library庫,hostprogs-y 主機(jī)程序等目標(biāo),但是基本都應(yīng)用在特定的目錄和場合下。

例子說明:

下面我們以實例來說明這幾個文件的作用

Step1:編輯配置文件Kconfig,加入驅(qū)動選項,使之在make menuconfig 的時候出現(xiàn)
打開 linux-2.6.32.2/drivers/char/Kconfig 文件,添加如圖所示:

image

保存退出,這時在linux-2.6.32.2 目錄位置運(yùn)行一下make menuconfig 就可以在Device
Drivers Character devices 菜單中看到剛才所添加的選項了,按下空格鍵將會選擇為<M>,
此意為要把該選項編譯為模塊方式;再按下空格會變?yōu)?lt;*>,意為要把該選項編譯到內(nèi)核中,
在此我們選擇<M>,如圖:

image

Step2:通過上一步,我們雖然可以在配置內(nèi)核的時候進(jìn)行選擇,但實際上此時執(zhí)行編譯內(nèi)核還是不能把mini2440_hello_module.c 編譯進(jìn)去的,還需要在Makefile 中把內(nèi)核配置選項和真正的源代碼聯(lián)系起來,打開linux-2.6.32.2/drivers/char/Makefile,如圖添加并保存退出:

image

 

Step3:這時回到linux-2.6.32.2 源代碼根目錄位置,執(zhí)行make modules,就可以生成我們所需要的內(nèi)核模塊文件 mini2440_hello_module.ko 了,如圖:至此,我們已經(jīng)完成了模塊驅(qū)動的編譯。

image

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

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多