linux命令 linux Windows php HTML5 微软 apache Firefox java google centos wordpress nginx Android 开源 程序员 Python mysql shell Ubuntu

将驱动程序添加到Linux内核

一,概述

Linux内核中增加程序需要完成以下三项工作:

1.将编写的源代码复制到Linux内核源代码的相应目录
2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项
3.在目录的Makefile文件中增加对新源代码的编译条目

二,实例

1,把驱动代码usbtmc(文件夹)复制到/usr/src/linux-headers-2.6.32-31-generic/drivers/char下。注意:

(1),设备驱动程序存放在内核源码树根目录drivers/的子目录下,在其内部,设备驱动文件进一步按照类别,类型等有序地组织起来。

a,字符设备存在于drivers/char/目录下
b,块设备存放在drivers/block/目录下
c,USB设备则存放在drivers/usb/目录下。

(2),此处的文件组织规则并非绝对不变,例如:USB设备也属于字符设备,也可以存放在drivers/usb/目录下。

(3),例如我们把驱动程序usbtmc(文件夹)存放在drivers/char/目录下,那么你要注意,在该目录下同时会存在大量的C源代码文件和许多其他目录。所有对于仅仅只有一两个源文件的设备驱动程序,可以直接存放在该目录下,但如果驱动程序包含许多源文件和其他辅助文件,那么可以创建一个新子目录。

2,修改char目录下的Kconfig和Makefile

(1),修改Kconfig,添加一句:source “drivers/char/usbtmc/Kconfig”

它表示将usbtmc目录下的Kconfig挂载到char目录下的Kconfig里面(为了使本层的Kconfig文件能起作用,我们需要修改父目录的Kconfig文件,加入source语句)

a,对驱动程序而言,Kconfig通常和源代码处于同一目录。
b,如果你建立了一个新子目录,而且也希望Kconfig文件存在于该目录中的话,那么就必须在一个已存在的Kconfig文件中将它引入,需要用上面的语句将其挂接在drivers/char目录中的Kconfig中。

(2)修改Makefile

添加一句话:

obj-$(CONFIG_USBTMC)+=usbtmc/

这行编译指令告诉模块构建系统在编译模块时需要进入usbtmc/子目录中。此时的驱动程序的编译取决于一个特殊配置CONFIG_USBTMC配置选项。

3,驱动程序文件夹中手动添加Kconfig和Makefile

(1)在usbtmc(文件夹)中新建一个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
endmenu

正确配置好后,我们在源码下执行make menuconfig后,在出现的Linux Kernel Configuration图形界面中选择DeviceDrivers下的characterdevcie中,将会看到新加的USBTCM菜单

(2)在usbtmc(文件夹)中新建一个新建一个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下的characterdevices里可以找到USBTMC)对其进行选定。然后退出,编译内核,就搞定了。

5,删除:

删除也很简单,首先在drivers/char目录下删掉自己的驱动文件夹。其次再删除Makefile和Kconfig之前添加的东西,就搞定了。

延伸阅读

评论