Linux驱动部分-(一)内核模块的编写

来源:互联网 发布:八皇后问题算法流程图 编辑:程序博客网 时间:2024/05/16 11:25

Linux驱动部分-内核模块编写

模块需要生成节点并链入设备链表,必须包含模块初始化函数、模块销毁函数
用module_init用来声明初始化函数
用module_exit用来声明销毁函数
用MODULE_LICENSE声明模块许可信息,可识别许可有:
"GPL"(适用于GNU通用公共许可的任何版本)
"GPL  and additional rights"

eg:简单内核模块

1)编写内核模块
/*************************************************************/
//simple_demo.c
#include<linux/kernel.h>  //printk声明的头文件
#include<linux/init.h>    //module_init和module_exit声明的头文件
#include<linux/module.h>  //所有模块驱动程序必须包括头文件


static int simple_init(void) //模块初始化函数,模块加载时调用的函数
{
printk("--------hello world!\n");
return 0;
}
static void simple_exit(void) //模块销毁函数
{
printk("---------hello goodbye!\n");
}
module_init(simple_init); //module_init用来声明初始化函数
module_exit(simple_exit); //module_exit用来声明销毁函数


MODULE_LICENSE("GPL");
/*************************************************************/
2)编译内核模块
内核的编译必须依赖源码树,否则无法编译内核模块
编写Makefile文件
eg:Makefile编写
obj-m:=simple.o
simple-objs:=simple_demo.obj-m
KDIR:=/lib/modules/2.6.18-8.el5/build
PWD:=$(shell pwd)
default:
make -C $(KDIR)M=$(PWD) modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order
运行:
make 
生成的模块为 hello.ko


/**注意**/
ps:文件名通常是大写M
$@ 目标文件
$< 第一个依赖文件
$^ 所有的依赖文件
3)驱动模块的加载与卸载
insmod simple.ko 加载模块
rmmod simple     卸载模块

cat /var/log/messages | grep'hello' 查看模块加载和卸载的情况











































0 0