前一段时间看了怎么在LINUX中写驱动程序
今天就写了一下试一试。
写个一个很简单的小程序
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/version.h"
#if CONFIG_MODBERSIONS==1
#define MODBERSIONS
#include "Linux.modversions.h"
#endif
#define devicename mydevice
MODULE_LICENSE("GPL"); //这里是给这个模块一个证书
/* the init funcion*/
int init_module()
{
//载入模块的函数
printk("holy shit it works!\n");
//因为PRINTF不可以工作,所以用PRINTK,这里的东西要用命令DMESG才可以看见
return 0;
}
/*the funcion which the device will be used */
int cleanup_module()
{
//清理模块的函数
printk("holy shit it works too !!\n");
return 0;
}
大部分是COPY,不过还好都理解了
写好以后编译,没有做makefile,用命令代替
gcc -Wall -DMODULE -D_KENNEL_ -DLinux -c test.c
具体意思不知道
编译生成。test.o
然后用insmod test.o载入模块
可能会出现一下的错误
1.模块版本不对
解决方法,修改/USR/INCLUDE/LINUX/VERSION.H,里面的#define UTS_RELEASE "2.4.18-3"
2.没有证书
MODULE_LICENSE("GPL");
3.模块busy
首先看你的加载模块的返回值是不是0,如果不是0就肯定会有这个错误
用lsmod来看看是否有同名的模块运行
有的话可以用rmmod命令干掉他
4.看不到输出
在控制台输出DMESG就可以看到