Linux驱动部分-(一)内核模块的编写
2015-11-20 15:59
603 查看
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' 查看模块加载和卸载的情况
相关文章推荐
- linux音频编程
- Linux---cp操作记录
- Linux环境下,用eclipse对ffmpeg源代码进行调试
- Linux之SSH登录密码验证很慢
- linux 开通ftp账号
- linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
- linux 驱动 指定下载的内核源码树编译
- PASSION之Linux命令集
- [转载]linux下svn常用指令
- 【转】在Linux下使用Jmeter执行测试任务
- Doxygen+linux
- centos下kubernetes+flannel部署(旧)
- Linux Advance--线程清理处理函数
- linux下运行strlwr函数的自定义
- linux-inode理解
- linux ssh 登录报hosts错误
- Linux下端口被占用解决
- centos 配置php
- linux命令——svn分支创建、合并
- linux 安装mysql