在Linux核心中增加驅動選項
在linux核心中增加驅動程式要完成3個方面的工作
1.將編寫的原始碼拷貝到Linux核心原始碼相應目錄
2.在目錄的Kconfig檔案中增加關於原始碼的相應目錄
3.在目錄的Makefile檔案中增加對新原始碼的編譯條目
掃盲點:
Makefile:分佈在Linux核心原始碼中的Makefile,定義Linux核心的編譯規則
Kconfig:給使用者提供配置選擇的功能
當你執行makemenuconfig命令的時候會根據你所選擇的配置生成一個.config檔案,此檔案中記錄著哪部分應該編譯進核心,哪部分應該編譯為核心模組。
當你執行makezImage的編譯核心時,就會根據此
Kconfig檔案的編寫:
(1).選單入口
configMODVERSIONS
bool“Module versioning support”
help
Usually,youhave to use modules compiled your kernel
SayingY here makes it …
“config”關鍵字定義新的配置選項,之後的幾行定義了該配置選項的屬性
選項型別:
每個配置選項都必須指定型別:booltrisate string hex int
提示:
型別定義後可以緊跟提示
例:
bool“Networking support”
或
boolprompt “Networking supporting”
提示的一般格式為:
prompt<prompt> [if<expr>]
預設值格式為:
default<expr>[if<expr>]
一個配置可以存在任意多個值,在這種情況下只有第一個被定義的值是可用的
依賴:
if[<expr>]也可以由dependson <expr>來代替
選擇關係:
select<B> [if<A>]
如果A被選中B預設也被選中
資料範圍:
range<symbol> <symbol> [if<expr>]
注意symbol只能是int和hex型別
幫助資訊:
help(或---help---)
。。。。
(2).選單結構
選單入口口在選單結構中的位置可以由兩種方法決定
第一種為:
menu“Network device support”
dependsin NET
cnfigNETDEVICES
…
endmenu
所有處於”menu”和“endmenu”之間的選單入口都會成為“Networkdevice support”的子選單
第二種為:
通過分析依賴關係生成選單結構
configMODULES
bool“Enable loadable module support”
configMODVERSIONS
bool“Set version information on all module symbols”
dependson MODULES
上述MODVERSIONS直接依賴於MODULES,只有MODULES不為”n”時,該選項才可見
Kconfig中的其他屬性:
1.choice
choice
<choiceoptions>
<choiceblock>
endchoice
例如在drivers/video/samsung/Kconfig中就定義瞭如下choice:
//例項:在核心中新增驅動程式碼目錄和字目錄
現在我們要在drivers目錄下為ARM體系增加test_driver驅動
目錄結構如下:
我們在makemenuconfig中增加一個它的選項
首先,我們需要為test目錄增加一個Kconfig
假設我們要增加兩個選單選項
1.CONFIG_TEST
當用戶選中它時會編譯test目下的test.ctest_queue.o test_client.c生成對應的模組檔案
2.CONFIG_TEST_CPU
當用戶選中它時會編譯cpu目錄下的cpu.c生成對應的模組檔案
Kconfig檔案的編寫:
其中CONFIG_TEST_CPU依賴於CONFIG_TEST
這樣Kconfig檔案就算編譯好了,然後我們在linux2.6/arm/Kconfig檔案中將將剛才我們編寫好的Kconfig包好進去
source“drivers/test/Kconfig”
這樣當你在核心目錄下執行makemenuconfig的時候就會看到如下選項
點選進入後
當我們選中TESTsupport後又會產生一個新的選項
選單項我們編寫好了,下面就是Makefile檔案的編寫
首先需要編寫test下的Makefile檔案
其中
obj-$(CONFIG_TEST_CPU) += cpu
表示當我們選中CONFIG_TEST_CPU選項時就進入cpu目錄下執行cpu下的Makefile檔案
所以我們還要為cpu目錄下的.c檔案編寫一個Makefile檔案
這樣當你在makemenuconfig中選中了TESTdriver中某一項時在編譯核心時就會編譯生成對應的核心模組到核心映象中