一.概述:
在linux內核中增加程序需要完成以下三項工作:
1.將編寫的源代碼復制到Linux內核源代碼的相應目錄
2.在目錄的Kconfig文件中增加新源代碼對應項目的編譯配置選項
3.在目錄的Makefile文件中增加對新源代碼的編譯條目
二.實例
1.先把驅動代碼usbtmc(文件夾)賦值到/usr/src/linux2.6.32/drivers/char下
首先你要清楚你的模塊應在內核源代碼樹中處於何處。
1>設備驅動程序存放在內核源碼樹根目錄drivers/的子目錄下,在其內部,設備驅動文件進一步按照類別,類型等有序地組織起來。
a.字符設備存在於drivers/char/目錄下
b.塊設備存放在drivers/block/目錄下
c.USB設備則存放在drivers/usb/目錄下。
注意:
(1)此處的文件組織規則並非絕對不變,例如:USB設備也屬於字符設備,也可以存放在drivers/usb/目錄下。
(2)例如我們把驅動程序usbtmc存放在drivers/char/目錄下,那麼你要注意,在該目錄下同時會存在大量的C源代碼文件和許多其他目錄。所有對於僅僅只有一兩個源文件的設備驅動程序,可以直接存放在該目錄下,但如果驅動程序包含許多源文件和其他輔助文件,那麼可以創建一個新子目錄。
此處,我們是把usbtmc目錄放在了drivers/char目錄下面
2.修改char目錄下的Kconfig和Makefile
(1)修改Kconfig
sudo gedit Kconfig
添加下面一句後
source"drivers/char/usbtmc/Kconfig"
它表示將usbtmc目錄下的Kconfig掛載到char目錄下的Kconfig裡面(為了使本層的Kconfig文件能起作用,我們需要修改父目錄的Kconfig文件,加入source語句)
1>對驅動程序而言,Kconfig通常和源代碼處於同一目錄。
2>如果你建立了一個新目錄,而且也希望Kconfig文件存在於該目錄中的話,那麼就必須在一個已存在的Kconfig文件中將它引入,需要用上面的
語句將其掛接在drivers/char目錄中的Kconfig中。
(2)修改Makefile
添加一句話:
obj-$(CONFIG_USBTMC)+=usbtmc/
這行編譯指令告訴模塊構建系統在編譯模塊時需要進入usbtmc/子目錄中。此時的驅動程序的編譯取決於一個特殊配置CONFIG_USBTMC配置選項。
3.現在在我們自己的驅動程序文件夾中添加Kconfig和Makefile
(1)修改Kconfig
新建一個Kconfig添加下面的話
menu "USBTMC" comment"USBTMC Driver" config USBTMC tristate "USBTMC" defaultn help Ifyou say Y here,support for the usbtmc with computer interface will becompiled into he kernel and accessible via device node. You can also say M here and the driver will be built as a module named usbtmc.ko. Ifunsure,say N. endmenu
正確配置好後,我們在源碼下執行sudo make menuconfig後,在出現的Linux Kernel Configuration圖形界面中選擇Device Drivers下的character devcie中,將會看到新加的USBTCM菜單,
(2)修改Makefile
新建一個Makefile,添加下面的話
obj-$(CONFIG_USBTMC)+=usbtmc.o
此時,構建系統運行就將會進入usbtmc/目錄下,並且將usbtmc.c編譯為usbtmc.ko模塊
注:
如果驅動程序源文件可能不只有一個,可以把Makefile做如下修改:
obj-$(CONFIG_USBTMC) += usbtmc.o usbtmc-objs := usbtmc-main.o usbtmc-usb1.o
此時,usbtmc-main.c和usbtmc-usb1.c就一起被編譯和連接到了usbtmc.ko某塊中。
4.現在已經Ok了,現在我們可以進入linux內核目錄下通過menuconfig可以找到我們的USBTMC選項(在Device_Drivers下的character devices裡可以找到USBTMC)對其進行選定。然後退出,編譯內核,就搞定了。
5.刪除:
刪除也很簡單,首先在drivers/char目錄下刪掉自己的驅動文件夾。其次再刪除Makefile和Kconfig之前添加的東西,就搞定了