1.何为杂项
本质是指主设备号为10号的字符设备,这个主设备号已经被系统分配给他了
注意:(有些次设备号已经被分配)
主设备号被分配如图:
2.为何要有misc
随着 Linux字符设备驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC 设备驱动就用于解
决此问题。
3.与普通字符设备注册与删除的区别
注册:
1.初始化misc结构体
static struct miscdevice my_misc = {
.minor = MISC_MINOR,
.name = MISC_NAME, //dev/MISC_NAME
.fops = &miscbeep_fops,
};
2.初始化miscbeep_fops,实现fops函数
3.用misc_register函数注册
misc_register(&my_misc);
注销:
misc_deregister(&my_misc);
4.程序
#include <linux/miscdevice.h>
#include <linux/module.h>
#include <linux/fs.h>
#include <linux/init.h>
#include <linux/of.h>
#define MISC_MINOR 10
#define MISC_NAME "my_misc"
int my_misc_open (struct inode *inode, struct file *filp)
{
printk("__%s__\n",__FUNCTION__);
printk("major:%d\nminor:%d\n",MAJOR(inode->i_rdev),MINOR(inode->i_rdev));
return 0;
}
int my_misc_release (struct inode *inode, struct file *filp)
{
printk("__%s__\n",__FUNCTION__);
return 0;
}
static struct file_operations miscbeep_fops = {
.owner = THIS_MODULE,
.open = my_misc_open,
.release = my_misc_release,
};
static struct miscdevice my_misc = {
.minor = MISC_MINOR,
.name = MISC_NAME, //dev/MISC_NAME
.fops = &miscbeep_fops,
};
static __init int my_misc_init(void)
{
int ret;
ret = misc_register(&my_misc);
if(ret < 0){
printk("misc device register failed!\r\n");
return -EFAULT;
}
return 0;
}
static __exit void my_misc_exit(void)
{
misc_deregister(&my_misc);
}
module_init(my_misc_init);
module_exit(my_misc_exit);
MODULE_LICENSE("GPL");