linux 驅(qū)動之Kconfig文件和Makefile文件實(shí)例
linux 驅(qū)動之Kconfig文件和Makefile文件實(shí)例
在Linux編寫驅(qū)動的過程中,有兩個(gè)文件是我們必須要了解和知曉的。這其中,一個(gè)是Kconfig文件,另外一個(gè)是Makefile文件。如果大家比較熟悉的話,那么肯定對內(nèi)核編譯需要的.config文件不陌生,在.config文件中,我們發(fā)現(xiàn)有的模塊被編譯進(jìn)了內(nèi)核,有的只是生成了一個(gè)module。這中間,我們?nèi)绾巫寖?nèi)核發(fā)現(xiàn)我們編寫的模塊呢,這就需要在Kconfig中進(jìn)行說明。至于如何生成模塊,那么就需要利用Makefile告訴編譯器,怎么編譯生成這個(gè)模塊。模仿其實(shí)就是最好的老師,我們可以以內(nèi)核中經(jīng)常使用到的網(wǎng)卡e1000模塊為例,說明內(nèi)核中是如何設(shè)置和編譯的。
首先,我們可以看一下,在2.6.32.60中關(guān)于e1000在Kconfig中是怎么描述的,
config E1000 tristate "Intel(R) PRO/1000 Gigabit Ethernet support" depends on PCI ---help--- This driver supports Intel(R) PRO/1000 gigabit ethernet family of adapters. For more information on how to identify your adapter, go to the Adapter & Driver ID Guide at: <http://support.intel.com/support/network/adapter/pro100/21397.htm> For general information and support, go to the Intel support website at: <http://support.intel.com> More specific information on configuring the driver is in <file:Documentation/networking/e1000.txt>. To compile this driver as a module, choose M here. The module will be called e1000.
上面的內(nèi)容是從drivers/net/Kconfig中摘錄出來的。內(nèi)容看上去不復(fù)雜,最重要的就是說明了模塊的名稱、用途、依賴的模塊名、說明等等。只要有了這個(gè)說明,我們在shell下輸入make menuconfig的時(shí)候就可以看到e1000這個(gè)選項(xiàng)了,輸入y表示編譯內(nèi)核;輸入n表示不編譯;輸入m表示模塊編寫,這是大家都知道的。
那么,有了這個(gè)模塊之后,需要編譯哪些文件中,我們在drivers/net/Makefile看到了這樣的內(nèi)容,
obj-$(CONFIG_E1000) += e1000/
顯然,這段代碼只是告訴我們,要想編譯e1000,必須要包含e1000這個(gè)目錄,所以e1000目錄下必然還有一個(gè)Makefile,果不其然,我們在e1000目錄下發(fā)現(xiàn)了這個(gè)Makefile,內(nèi)容如下,
obj-$(CONFIG_E1000) += e1000.o e1000-objs := e1000_main.o e1000_hw.o e1000_ethtool.o e1000_param.o
看了這個(gè)文件,其實(shí)大家心理就應(yīng)該有底了。原來這個(gè)e1000模塊最終生成的文件就是e1000.ko,依賴的文件就是e1000_main.c、e1000_hw.c、e1000_ethtool.c、e1000_param.c這四個(gè)文件。只要CONFIG_E1000被設(shè)置了,那么這個(gè)模塊就會被正常編譯。我們要做的就是打開這個(gè)開關(guān)就可以了,剩下kernel會幫我們搞定一切。當(dāng)然,如果大家想把這個(gè)模塊拿出來,自己用一個(gè)獨(dú)立的module編譯也是可以的。
關(guān)于linux驅(qū)動的編譯部分,其實(shí)就這兩個(gè)配置文件比較重要。大家可以自己實(shí)際練習(xí)一下,進(jìn)一步加深印象。
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
- Makefile/cmake/node-gyp中區(qū)分判斷不同平臺的方法
- C語言 makefile學(xué)習(xí)及實(shí)現(xiàn)實(shí)例
- Linux里Makefile是什么?它是如何工作的?
- Linux 中makefile的命令包定義及使用
- Linux makefile 和shell文件相互調(diào)用實(shí)例詳解
- 關(guān)于Linux下對于makefile的理解
- Python實(shí)現(xiàn)生成簡單的Makefile文件代碼示例
- Linux/Unix環(huán)境下的Make和Makefile詳解
- Linux下Makefile的automake生成全攻略
- C++關(guān)于Makefile的詳解含通用模板
相關(guān)文章
每天一個(gè)Linux命令之shell單引號和雙引號的經(jīng)典解釋
這篇文章主要給大家介紹了關(guān)于每天一個(gè)Linux命令之shell單引號和雙引號的經(jīng)典解釋,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Linux系統(tǒng)具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07bash shell命令行選項(xiàng)與修傳入?yún)?shù)處理
本文介紹了bash shell命令行參數(shù)與命令行選項(xiàng)的操作方法,有關(guān)shell 命令行參數(shù)的實(shí)例教程,有需要的朋友參考下。2014-04-04