內核源碼樹(shù)的目錄下都有兩個(gè)文件Kconfig(2.4版本是Config.in)和Makefile。分布到各目錄的Kconfig構成了一個(gè)分布式的內核配置數據庫,每個(gè)Kconfig分別描述了所屬目錄源文件相關(guān)的內核配置菜單。在內核配置make menuconfig(或xconfig等)時(shí),從Kconfig中讀出菜單,用戶(hù)選擇后保存到.config的內核配置文件中。在內核編譯時(shí),主Makefile調用這個(gè).config,就知道了用戶(hù)的選擇。
*上面的內容說(shuō)明了,Kconfig就是對應著(zhù)內核的配置菜單。如果要想添加新的驅動(dòng)到內核的源碼中,可以修改Kconfig,這樣就可以選擇這個(gè)驅動(dòng),如果想使這個(gè)驅動(dòng)被編譯,要修改Makefile
so添加新的驅動(dòng)時(shí)需要修改的文件有兩種(注意不只是兩個(gè))
*Kconfig
*Makefile
要想知道怎么修改這兩種文件,就要知道兩種文件的語(yǔ)法結構
Kconfig
每個(gè)菜單都有一個(gè)關(guān)鍵字標識,最常見(jiàn)的就是config
語(yǔ)法:
config <symbol>
<config options>
symbol是一個(gè)新的標記的菜單項,options是在這個(gè)新的菜單項下的屬性和選項
其中options部分有:
1、類(lèi)型定義:
每個(gè)config菜單項都要有類(lèi)型定義,bool布爾類(lèi)型、 tristate三態(tài):內建、模塊、移除 string字符串、 hex十六進(jìn)制、 integer整型
例如config HELLO_MODULE
bool "hello test module"
bool類(lèi)型的只能選中或不選中,tristate類(lèi)型的菜單項多了編譯成內核模塊的選項,如果選擇編譯成內核模塊,則會(huì )在.config中生成一個(gè)CONFIG_HELLO_MODULE=m的配置,如果選擇內建,就是直接編譯成內核影響,就會(huì )在.config中生成一個(gè)CONFIG_HELLO_MODULE=y的配置.
2、依賴(lài)型定義depends on或requires
指此菜單的出現與否依賴(lài)于另一個(gè)定義
config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
這個(gè)例子表明HELLO_MODULE這個(gè)菜單項只對XScale處理器有效。
3、幫助性定義
只是增加幫助用關(guān)鍵字help或者---help---
內核的Makefile
在linux2.6.x/Documentation/kbuild目錄下有詳細的介紹有關(guān)kernel makefile的知識。
內核的Makefile分為5個(gè)組成部分:
Makefile 最頂層的Makefile
.config 內核的當前配置文件,編譯時(shí)成為定層Makefile的一部分
arch/$(ARCH)/Makefile 與體系結構相關(guān)的Makefile
s/ Makefile.* 一些Makefile的通用規則
kbuild Makefile 各級目錄下的大概約500個(gè)文件,編譯時(shí)根據上層Makefile傳下來(lái)的宏定義和其他編譯規則,將源代碼編譯成模塊或者編入內核
頂層的Makefile文件讀取 .config文件的內容,并總體上負責build內核和模塊。Arch Makefile則提供補充體系結構相關(guān)的信息。 s目錄下的Makefile文件包含了所有用來(lái)根據kbuild Makefile 構建內核所需的定義和規則。
(其中.config的內容是在make menuconfig的時(shí)候,通過(guò)Kconfig文件配置的結果。
舉個(gè)例子:
假設想把自己寫(xiě)的一個(gè)flash的驅動(dòng)程序加載到工程中,而且能夠通過(guò)menuconfig配置內核時(shí)選擇該驅動(dòng)該怎么辦呢?可以分三步:
第一:將你寫(xiě)的flashtest.c 文件添加到/driver/mtd/maps/ 目錄下。
第二:修改/driver/mtd/maps目錄下的kconfig文件:
config MTD_flashtest
tristate “ap71 flash"
這樣當make menuconfig時(shí) ,將會(huì )出現 ap71 flash選項。
第三:修改該目錄下makefile文件。
ü 添加如下內容:obj-$(CONFIG_MTD_flashtest) += flashtest.o
聯(lián)系客服