linux驱动之misc杂项

文章介绍了Linux系统中杂项设备的概念,它是主设备号为10的字符设备,用于缓解设备号资源紧张的问题。文章详细阐述了如何注册和注销杂项设备,包括初始化misc结构体,设置file_operations以及使用misc_register和misc_deregister函数。还提供了一个示例程序来展示其实现过程。
摘要由CSDN通过智能技术生成

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");
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值