编写Linux驱动程序的基本步骤

这里只是简要地描述编写Linux驱动的基本步骤,且不会涉及到具体Linux操作或复杂的Linux编程。
要成功编译及安装Linux内核模块,需做好以下几方面事情:

1 安装编写Linux驱动所用到的编译工具。

(具体安装不是本文关心内容)

2 下载内核源码,并配置构造Linux内核树;

Linux内核版本最好跟要加载模块的系统一致,如不一致,
则可能导致在加载模块失败,这时需强制加载。(具体配置设置及加载不是本文关心内容)
源码可到www.kernel.org站上下载。

3 要加载模块的系统需支持Linux驱动模块加载功能

否则无法加载Linux驱动模块。该功能可在配置Linux系统内核时
选中,如图所示:

Linux驱动模块配置
该配置基于linux-3.2.1内核

4 编写Linux驱动程序

当Linux驱动编译环境搭建好后,接下来就是编写Linux驱动。下面以一个简单的示例”demo.c”来演示如何编写一个
最简单的Linux驱动程序,当然这个Linux驱动程序除了演示之外别无他用。
  1. #include <linux/init.h>
  2. #include <linux/module.h>
  3. MODULE_LICENSE(“Dual BSD/GPL”); /* 申明模块使用的协议 */
  4. MODULE_AUTHOR(“Kozo”);          /* 申明模块作者 */
  5. MODULE_DESCRIPTION(“It’s a demo module“); /* 描述驱动模块 */
  6. static __init int demo_init(void)
  7. {
  8.     printk(KERN_INFO”demo init\n”);
  9.     return 0;
  10. }
  11. static __exit void demo_exit(void)
  12. {
  13.     printk(KERN_INFO”demo exit\n”);
  14. }
  15. module_init(demo_init); /* 声明加载函数 */
  16. module_exit(demo_exit); /* 声明卸载函数*/

5 编写Linux驱动的Makefile文件

Makefile代码如下:

点击(此处)折叠或打开

  1. # DEBUG = y
  2. ifeq ($(DEBUG),y)
  3.     DEBFLAGS = -O -g #-D”macro of your module”
  4. else
  5.     DEBFLAGS = -O2
  6. endif
  7. EXTRA_CFLAGS += $(DEBFLAGS)
  8. #EXTRA_CFLAGS += -I”the direction of header file”
  9. ifneq ($(KERNELRELEASE),)
  10.     obj-m = demo.o
  11. else
  12.     KERNELDIR ?= /usr/src/kernels/$(shell uname -r)/
  13.     PWD := $(shell pwd)
  14. default:
  15.     $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
  16. endif
  17. clean:
  18.     rm -rf *.o *.depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers *.ko.unsigned

 

6 编译Linux驱动模块

注意:demo.c与Makefile应在同一目录下。
使用”$make”,便可生成demo.ko模块。

7 Linux驱动模块加载与卸载

加载模块可使用”#insmod demo.ko”或”#modprobe demo.ko”,加载成功后,
可通过”#lsmod | grep demo”查看.
卸载模块可使用”#rmmod demo”。

8 输出Linux驱动模块打印信息

使用”#dmesg”可输出模块打印信息,demo模块的输出信息如下Linux驱动模块调用图

 

9. Linux驱动demo程序下载地址:

 demo.zip 

原文链接:http://blog.chinaunix.net/uid-24467128-id-3163582.html

 

Linux驱动程序开发扩展阅读:

Linux USB驱动程序实践-上篇

Linux USB驱动程序实践-下篇

此条目发表在 Linux驱动开发 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。

发表评论