Linux简单驱动程序示意(备忘)
平台:Linux-2.6.18测试通过:
mydev.c代码:
/** mydev.c **/
#include <linux/module.h> //模块所需的大量符号和函数定义
#include <linux/init.h> //指定初始化和清楚函数
#include <linux/fs.h> //文件系统相关的函数和头文件
#include <linux/cdev.h> //cdev结构的头文件
#include <asm/uaccess.h> //在内核和用户空间中移动数据的函数
MODULE_LICENSE("GPL"); //指定代码使用的许可证
static int mydev_init(void)
{
printk(KERN_EMERG "my dev insmode!/n"); //提高内核打印优先级,否则看不到输出
return 0;
}
static int mydev_exit(void)
{
printk(KERN_EMERG"my dev rmmode!/n"); //提高内核打印优先级,否则看不到输出
return 0;
}
MODULE_AUTHOR("awei");
MODULE_DESCRIPTION("awei:mydev test");
module_init(mydev_init); //模块被装载时调用globalvar_init
module_exit(mydev_exit); //模块被卸载时调用globalvar_exit
Makefile代码:
# filename: Makefile
# function:
# author: awei 2009/02/17
# modify:
#
ifneq ($(KERNELRELEASE), )
obj-m := mydev.o
else
KERNELDIR ?= /lib/modules/$(shell uname -r)/build
PWD := $(shell pwd)
all:
$(MAKE) -C $(KERNELDIR) M=$(PWD) modules
clean:
$(MAKE) -C $(KERNELDIR) M=$(PWD) clean
endif
保存以上两文件于同一目录,测试:
make
目录下会产生:mydev.ko文件;
insmod mydev.ko
打印出信息:my dev insmode!
lsmod
查看加载的模块,可以看到mydev模块;
Rmmod mydev.ko
打印出信息:my dev rmmode!
完成!