Linux內核配置---menuconfig
1. 示例
config SGI_NEWPORT_CONSOLE tristate "SGI Newport Console support" depends on SGI_IP22 select FONT_SUPPORT help Say Y here if you want the console on the Newport aka XL graphics card of your Indy. Most people say Y here. config DUMMY_CONSOLE_COLUMNSint "Initial number of console screen columns" depends on DUMMY_CONSOLE && !ARM default 160 if PARISC default 80 help On PA-RISC, the default value is 160, which should fit a 1280x1024 monitor. Select 80 if you use a 640x480 resolution by default. config FRAMEBUFFER_CONSOLE bool "Framebuffer Console support" depends on FB && !UML select VT_HW_CONSOLE_BINDING select CRC32 select FONT_SUPPORT default n help Low-level framebuffer-based console driver.
config DRM_KMS_FB_HELPER bool depends on DRM_KMS_HELPERselect FB # select FRAMEBUFFER_CONSOLE if !EXPERT # select FRAMEBUFFER_CONSOLE_DETECT_PRIMARY if FRAMEBUFFER_CONSOLE select FB_SYS_FOPS select FB_SYS_FILLRECT select FB_SYS_COPYAREA select FB_SYS_IMAGEBLIT select FB_CFB_FILLRECT select FB_CFB_COPYAREA select FB_CFB_IMAGEBLIT select FB_DEFERRED_IO help FBDEV helpers for KMS drivers.
2. 關鍵字解釋
Kconfig按照一定的格式來書寫,menuconfig程序可以識別這種格式,然後從中提取出有效信息組成menuconfig中的菜單項。將來在做驅動移植等工作時,有時需要自己添加Kconfig中的一個配置項來將某個設備驅動添加到內核的配置項目中,這時候就需要對Kconfig的配置項格式有所了解,否則就不會添加。
menuconfig:表示菜單(本身屬於一個菜單中的項目,但是他又有子菜單項目)、config表示菜單中的一個配置項(本身並沒有子菜單下的項目)。一個menuconfig後面跟著的所有config項就是這個menuconfig的子菜單。這就是Kconfig中表示的目錄關系。
source:內核源碼目錄樹中每一個Kconfig都會用source引入其所有子目錄下的Kconfig,從而保證了所有的Kconfig項目都被包含進menuconfig中。這個也說明了:如果你自己在linux內核中添加了一個文件夾,一定要在這個文件夾下創建一個Kconfig文件,然後在這個文件夾的上一層目錄的Kconfig中source引入這個文件夾下的Kconfig文件。
menu: 表示一個菜單項,例如 menu "Console display driver support", 菜單項裏面是各種配置。
tristate:意思是三態(3種狀態,對應Y、N、M三種選擇方式),意思就是這個配置項可以被三種選擇。
bool:是要麽真要麽假(對應Y和N)。意思是這個配置項只能被2種選擇。
int: 可以指定一個值,在autoconfig.h中會生成 #define CONFIG_DUMMY_CONSOLE_COLUMNS 80, make menuconfig中顯示為: (80)Initial number of console screen columns
depends:意思是本配置項依賴於另一個配置項。如果那個依賴的配置項為Y或者M,則本配置項才有意義;如果依賴的那個配置項本身被設置為N,則本配置項根本沒有意義。depends項會導致make menuconfig的時候找不到一些配置項。所以在menuconfig中如果找不到一個選項,但是這個選項在Kconfig中卻是有的,則可能的原因就是這個配置項依賴的一個配置項是不成立的。depends依賴的配置項可以是多個,還可以有邏輯運算。這種時候只要依賴項目運算式子的結果為真則依賴就成立。
select:表示depends on的值有效時,下面的select也會成立,將相應的內容選上。 此時被別人選中的選項失去了自我決定自己是否選擇的能力,如上例中 FRAMEBUFFER_CONSOLE 被 DRM_KMS_FB_HELPER 選中後menuconfig中它只能顯示被選中狀態,而且無法被更改!
default:表示depends on的值有效時,下面的default也會成立,將相應的選項選上,有三種選項,分別對應y,n,m。
help:幫助信息,解釋這個配置項的含義,以及如何去配置他。
comment: comment條目用於定義一些幫助信息,出現在界面的第一行,如在arch/arm/Kconifg中有如下代碼:
choice: choice條目將多個類似的配置選項組合在一起,供用戶單選或多選,這不同於menu條目
3. Kconfig和.config文件和Makefile三者的關聯
配置項被配置成Y、N、M會影響“.config”文件中的CONFIG_XXX變量的配置值。“.config”中的配置值(=y、=m、沒有)會影響最終的編譯鏈接過程。如果=y則會被編入(built-in),如果=m會被單獨連接成一個”.ko”模塊,=n則對應的代碼不會被編譯。通過makefile實現的。
Kconfig中:config VGACON_SOFT_SCROLLBACK
makefile中:obj-$(VGACON_SOFT_SCROLLBACK) += xxxxx.c
autoconf.h中:#define CONFIG_VGACON_SOFT_SCROLLBACK 1
Linux內核配置---menuconfig