将驱动程序模块添加到内核

. 概述:

将驱动程序模块添加到内核需要完成以下三项工作:

1. 将编写的源代码复制到 Linux 内核源代码的相应目录

2. 在目录的 Kconfig 文件中增加新源代码对应项目的编译配置选项

3. 在目录的 Makefile 文件中增加对新源代码的编译条目

. 实例

1. 先把驱动代码 gpio( 文件夹 ) 赋值到 linux-2.6.39/drivers/char

        首先你要清楚你的模块应在内核源代码树中处于何处。

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

a. 字符设备存在于 drivers/char/ 目录下

b. 块设备存放在 drivers/block/ 目录下

c.USB 设备则存放在 drivers/usb/ 目录下。

注意:

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

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

此处,我们是把 gpio目录放在了 drivers/char 目录下面,gpio目录中放驱动程序gpio_at91sam9x5ek.c

2. 修改 char 目录下的 Kconfig Makefile

(1) 修改 Kconfig

添加下面一句后

source "drivers/char/gpio/Kconfig"

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

1> 对驱动程序而言, Kconfig 通常和源代码处于同一目录。

2> 如果你建立了一个新字目录,而且也希望 Kconfig 文件存在于该目录中的话,那么就必须在一个已存在的 Kconfig 文件中将它引入,需要用上面的

语句将其挂接在 drivers/char 目录中的 Kconfig 中。

(2) 修改 Makefile

添加一句话:

obj-$(CONFIG_GPIO) +=gpio/

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

3. 现在在我们自己些驱动程序文件夹中添加 Kconfig Makefile

(1) 修改 Kconfig

新建一个 Kconfig 添加下面的话

menuconfig GPIO
       tristate 'GPIO top-level message handler'
       depends on HAS_IOMEM
       help
         This enables the central IPMI message handler, required for IPMI
  to work.

         IPMI is a standard for managing sensors (temperature,
         voltage, etc.) in a system.

         See for more details on the driver.

  If unsure, say N.

if GPIO

config GPIO_AT91SAM9X5EK
       bool 'config the led and buzzer of the reader'
       help
         When a panic occurs, this will cause the IPMI message handler to
  generate an IPMI event describing the panic to each interface
  registered with the message handler.

endif # GPIO

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

(2) 修改 Makefile

新建一个 Makefile ,添加下面的话

obj-$(GPIO_AT91SAM9X5EK) +=gpio_at91sam9x5ek.o

此时,构建系统运行就将会进入 gpio/ 目录下,并且将 gpio_at91sam9x5ek.c 编译为 gpio_at91sam9x5ek.ko 模块

注:

如果驱动程序源文件可能不只有一个,可以把 Makefile 做如下修改:

obj-$(GPIO_AT91SAM9X5EK) +=gpio_at91sam9x5ek.o

gpio_at91sam9x5ek-objs :=gpio_at91sam9x5ek-main.o gpio_at91sam9x5ek-usb1.o

此时, gpio_at91sam9x5ek-main.c gpio_at91sam9x5ek-usb1.c 就一起被编译和连接到了 gpio_at91sam9x5ek.ko块中。

4. 现在已经 Ok 了,现在我们可以进入 linux 内核目录下通过 menuconfig 可以找到我们的 GPIO 选项(在 Device_Drivers 下的 character devices 里可以找到 GPIO )对其进行选定。然后退出,编译内核,就搞定了。

 

5. 删除:

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

 

参考: http://blog.csdn.net/tigerjb/article/details/6426321

你可能感兴趣的:(linux驱动开发)