Windows XP Windows 7 Windows 2003 Windows Vista Windows教程綜合 Linux 系統教程
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟件教程
 Windows教程網 >> Linux系統教程 >> Linux教程 >> 如何向Linux內核添加驅動程序

如何向Linux內核添加驅動程序

日期:2017/2/7 14:29:32      編輯:Linux教程
 

一.概述:

在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之前添加的東西,就搞定了

linux driver

Copyright © Windows教程網 All Rights Reserved