这里只是概要地描述编写驱动的基本步骤,且不会涉及到具体操作或复杂的编程。
要成功编译及安装内核模块,需做好以下几方面事情:
1 安装编译工具。(具体安装不是本文关心内容)
2 下载内核源码,并配置构造内核树;内核版本最好跟要加载模块的系统一致,如不一致,
则可能导致在加载模块失败,这时需强制加载。(具体配置设置及加载不是本文关心内容)
源码可到
站上下载。
3 要加载模块的系统需支持模块加载功能,否则无法加载驱动模块。该功能可在配置系统内核时
选中,如图所示:
该配置基于linux-3.2.1内核
4 编写驱动程序
demo.zip
当编译环境搭建好后,接下来就是编写程序。下面以一个简单的示例"demo.c"来演示如何编写一个
最简单的驱动程序,当然这个驱动程序除了演示之外别无他用。
-
#include <linux/init.h>
-
#include <linux/module.h>
-
-
MODULE_LICENSE("Dual BSD/GPL"); /* 申明模块使用的协议 */
-
MODULE_AUTHOR("Kozo"); /* 申明模块作者 */
-
MODULE_DESCRIPTION("It's a demo module"); /* 描述驱动模块 */
-
-
static __init int demo_init(void)
-
{
-
printk(KERN_INFO"demo init\n");
-
return 0;
-
}
-
static __exit void demo_exit(void)
-
{
-
printk(KERN_INFO"demo exit\n");
-
}
-
-
module_init(demo_init); /* 声明加载函数 */
-
module_exit(demo_exit); /* 声明卸载函数*/
5 编写Makefile文件
Makefile代码如下:
-
# DEBUG = y
-
-
ifeq ($(DEBUG),y)
-
DEBFLAGS = -O -g #-D"macro of your module"
-
else
-
DEBFLAGS = -O2
-
endif
-
-
EXTRA_CFLAGS += $(DEBFLAGS)
-
#EXTRA_CFLAGS += -I"the direction of header file"
-
-
ifneq ($(KERNELRELEASE),)
-
obj-m = demo.o
-
else
-
KERNELDIR ?= /usr/src/kernels/$(shell uname -r)/
-
PWD := $(shell pwd)
-
default:
-
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
-
endif
-
-
clean:
-
rm -rf *.o *.depend .*.cmd *.ko *.mod.c .tmp_versions *.order *.symvers *.ko.unsigned
6 编译模块
注意:demo.c与Makefile应在同一目录下。
使用"$make",便可生成demo.ko模块。
7 模块加载与卸载
加载模块可使用"#insmod demo.ko"或"#modprobe demo.ko",加载成功后,
可通过"#lsmod | grep demo"查看.
卸载模块可使用"#rmmod demo"。
8 输出模块打印信息
使用"#dmesg"可输出模块打印信息,demo模块的输出信息如下
阅读(6355) | 评论(0) | 转发(5) |