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

本文介绍如何编写简单的Linux内核模块,包括模块初始化、销毁函数的定义与使用,以及如何通过makefile进行编译。此外,还介绍了如何加载和卸载内核模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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' 查看模块加载和卸载的情况











































评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值