编译时向内核添加新设备 模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时, 还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载, 就会很不方便。

来源:互联网 发布:添加网络打印机步骤 编辑:程序博客网 时间:2024/06/14 00:38
编译时向内核添加新设备
模块的方式动态的将驱动加入内核,但这种方式加入的驱动程序,当系统重新启动时,
还需要重新用模块的方式进行插入,如果是系统内常用的设备驱动采用这种方式进行加载,
就会很不方便。本小节将介绍如何在内核编译时就把驱动加入内核。
当把设备驱动源程序编写好以后,需要把它编译进内核。当用户需要打开设备时,还需
要一个在/dev 目录的设备文件名称,这样驱动程序才能工作起来。下面分步骤来介绍如何
把驱动程序编译进内核及创建设备文件名称。请读者参考《Linux应用与开发典型实例精讲》
(邱
铁,于玉龙,徐子川编著,清华大学出版社)第12章的介绍。
1、首先在linux-2.6.30/drivers/ 目录下建立一个名称为“drivertest”的新目录,
并设计驱动源程序driver_kernel.c,为了方便,我们采用与上一节相同的源程序。
2、
在新建的linux-2.6.30/drivers/ drivertest目录下建立一个新的配置文件Kconfig
和工程管理Makefile文件。
工程管理Makefile文件根据CONFIG_DRIVER_VMALLOC宏来决定是否编译源文件,
并输出目标模块文件。脚本内容如下:
#
# Makefile for the Driver-myalloc.
#
obj-$(CONFIG_DRIVER_VMALLOC)
+= driver_kernel.o
在Kconfig文件中,主要为内核配置时提供选择开关,并定义DRIVER_VMALLOC 宏,
作为是否包含myalloc 驱动的选项。myalloc 的配置文件Kconfig内容如下:
#
# DRIVER test subsystem configuration
#
menu "DRIVER KMALLOC support"
config DRIVER_VMALLOC
tristate "Driver_test is supported"
---help---
Driver_test use vmalloc .
endmenu
3、把 myalloc 设备驱动程序源文件 driver_kernel.c 放到新建的 linux-2.6.30/drivers/ drivertest
目录下。使上一步建立的 Kconfig 文件、Makefile 文件和源文件同在一目录下,如图 18.5 所
示。
图 18.5 drivertest 目录
4、修改drivers/Kconfig文件,如图18.6所示,增加一行把myalloc配置作为驱动的一个
选项,所添加的内容如下:
source "drivers/drivertest/Kconfig
图 18.6 配置 drivers/Kconfig
5、修改kernel/drivers/Makefile 文件,在文件的最后,添加如下脚本:
obj-$(CONFIG_DRIVER_VMALLOC)
+= drivertest/
这样使在编译Linux 内核驱动时,能把drivertest/目录包含进去。在这里使用了宏定义为
CONFIG_DRIVER_VMALLOC 判断是否包含。如图18.7所示
图 18.7 配置 drivers/Makefile
6、完成以上修改后,make menuconfig重新配置内核,其中包括加载我们编写的新设备
myalloc,具本设置方支是:并从“Device drivers --->DRIVER KMALLOC support”
选择添加myalloc设备,其中Device drivers目录如图18.8所示。
图 18.8 Device drivers 目录
从Device drivers目录,选择DRIVER KMALLOC support- ,展开后如图18.9所示。按
空格键,使<*>出现,表示选择该驱动。
图 18.9 DRIVER KMALLOC support 目录
完成设置后,重新编译内核,生成映象文件 bzImage,按照第 12 章所介绍的安
装并引导系统。
7、检测myalloc驱动程序的安装
系统重启动后,进入kernel 2.6.30启动选项。Linux 系统正确运行后,通过以下命令查
看myalloc驱动程序安装结果:
ls
/dev
如图18.10所示,如果在例表中找到“myalloc”则表示设备已添加进内核中。
图 18.10 /dev 目录下设备文件列表
8、测试myalloc驱动程序的正确性。
采用上一节介绍的测试程序,进行测试,如图18.11所示,表明驱动的读写都是正确的。
图 18.11 测试 myalloc 驱动的正确性
本文节选自:
邱铁,于玉龙,徐子川.Linux应用与开发典型实例精讲.清华大学出版社.2010 年 5 月出版


原创粉丝点击