linux內核中把本身寫的驅動添加到make menuconfig

linux驅動調試的時候,能夠本身寫的驅動做爲modules  ,而後手動加載到內核  ,可是最終爲了方便,仍是須要把寫好的驅動添加到內核的meke menuconfig裏面,這裏記錄一個頗有用的比較詳細的文檔。linux

 

linux內核中Kconfig文檔的做用數據庫


2.6內核的源碼樹目錄下通常都會有兩個文文:Kconfig和Makefile。分佈在各目錄下的Kconfig構成了一個分佈式的內核配置數據庫,每一個Kconfig分別描述了所屬目錄源文件相關的內核配置菜單。在內核配置make menuconfig(或xconfig等)時,從Kconfig中讀出配置菜單,用戶配置完後保存到.config(在頂層目錄下生成)中。在內核編譯時,主Makefile調用這個.config,就知道了用戶對內核的配置狀況。分佈式

上面的內容說明:Kconfig就是對應着內核的配置菜單。假如要想添加新的驅動到內核的源碼中,能夠經過修改Kconfig來增長對咱們驅動的配置菜單,這樣就有途徑選擇咱們的驅動,假如想使這個驅動被編譯,還要修改該驅動所在目錄下的Makefile。ui

所以,通常添加新的驅動時須要修改的文件有兩種(注意不僅是兩個)spa

*Kconfig
*Makefile.net

要想知道怎麼修改這兩種文件,就要知道兩種文檔的語法結構。調試

First:   Kconfigblog


 

每一個菜單項都有一個關鍵字標識,最多見的就是config。文檔

語法:
config symbol字符串

options


symbol就是新的菜單項,options是在這個新的菜單項下的屬性和選項

其中options部分有:

一、類型定義:


  每一個config菜單項都要有類型定義,bool:布爾類型, tristate三態:內建、模塊、移除, string:字符串, hex:十六進制, integer:整型

例如config HELLO_MODULE
bool "hello test module"

bool類型的只能選中或不選中,tristate類型的菜單項多了編譯成內核模塊的選項,假如選擇編譯成內核模塊,則會在.config中生成一個CONFIG_HELLO_MODULE=m的配置,假如選擇內建,就是直接編譯成內核影響,就會在.config中生成一個CONFIG_HELLO_MODULE=y的配置.

二、依賴型定義depends on或requires
指此菜單的出現是否依賴於另外一個定義

config HELLO_MODULE
bool "hello test module"
depends on ARCH_PXA
    這個例子代表HELLO_MODULE這個菜單項只對XScale處理器有效,即只有在選擇了ARCH_PXA, 該菜單纔可見(可配置)。

三、幫助性定義
只是增長幫助用關鍵字help或---help---


更多詳細的Kconfigconfig語法可參考:


Second:  內核的Makefile

內核的Makefile分爲5個組成部分:
Makefile     最頂層的Makefile
.config        內核的當前配置文檔,編譯時成爲頂層Makefile的一部分
arch/$(ARCH)/Makefile 和體系結構相關的Makefile
s/ Makefile.*    一些Makefile的通用規則
kbuild Makefile      各級目錄下的大概約500個文檔,編譯時根據上層Makefile傳下來的宏定義和其餘編譯規則,將源代碼編譯成模塊或編入內核。

頂層的Makefile文檔讀取 .config文檔的內容,並整體上負責build內核和模塊。Arch Makefile則提供補充體系結構相關的信息。 s目錄下的Makefile文檔包含了任何用來根據kbuild Makefile 構建內核所需的定義和規則。

(其中.config的內容是在make menuconfig的時候,經過Kconfig文檔配置的結果)


在linux2.6.x/Documentation/kbuild目錄下有詳細的介紹有關kernel makefile的知識。

最後舉個例子:
假設想把本身寫的一個flash的驅動程式加載到工程中,並且可以經過menuconfig配置內核時選擇該驅動該怎麼辦呢?可以分三步:

第一:將您寫的flashtest.c 文檔添加到/driver/mtd/maps/ 目錄下。

第二:修改/driver/mtd/maps目錄下的kconfig文檔:
config MTD_flashtest
tristate 「ap71 flash"

這樣當make menuconfig時 ,將會出現 ap71 flash選項。

第三:修改該目錄下makefile文檔。
添加以下內容:obj-$(CONFIG_MTD_flashtest)    += flashtest.o

這樣,當您運行make menucofnig時,您將發現ap71 flash選項,假如您選擇了此項。該選擇就會保存在.config文檔中。當您編譯內核時,將會讀取.config文檔,當發現ap71 flash 選項爲yes 時,系統在調用/driver/mtd/maps/下的makefile 時,將會把 flashtest.o 加入到內核中。便可達到您的目的。

參考    https://blog.csdn.net/aaronychen/article/details/2946740

相關文章
相關標籤/搜索