杂项的驱动开发
杂项驱动设备文件的特点
杂项,指一类设备,不想分类的设备,
所有杂项的主设备号都是0
次设备号系统自动分配,杂项开发不用担心设备号的问题
杂项开发驱动接口
misc_register();//杂项注册
misc_deregister()//杂项取消注册
函数的功能:杂项设备的注册,注册完毕后会在 / dev / 对应设备文件设备的信息注册到内核 -> 链表 ( 不要研究 )
函数头文件
#include <linux/miscdevice.h>
函数原型
intmisc_register(structmiscdevice *misc)
杂项结构体成员
structmiscdevice {
int minor; //次设备号,主设备号自动为10
const char*name; // /dev/name
const structfile_operations *fops; //实现自己的open close 等
。。。。。。。。
}
次设备号给255,系统自动分配
structfile_operations 结构体成员
structmodule * owner; //固定为THIS_MOUDLE
.....
//其他函数自己实现
写一个杂项驱动
#include "linux/kernel.h"
#include "linux/module.h"
#include "linux/miscdevice.h"
static int open(structinode *i,structfile *f)
{
printk("open\r\n");
return 0;
}
static int close(structinode *i,structfile *f)
{
printk("close\r\n");
return 0;
}
struct file_operations misc_fops={
.owner=THIS_MODULE;
.open=open;
.release=close;
}
struct miscdevice misc={
.minor=255; //系统自动分配
.name="led";
.fops=&misc_fops;
}
static int __int led_init(void)
{
misc_register(&misc);
return 0;
}
static void __exit led_exit(void)
{
misc_deregister(&misc);
}
module_init(led_init);
moudle_exit(led_exit);
MODULE_LICENSE("GPL");