嵌入式linux MISC设备驱动

        misc 的意思是混合、杂项的,因此 MISC 驱动也叫做杂项驱动,也就是当我们板子上的某 些外设无法进行分类的时候就可以使用 MISC 驱动。MISC 驱动其实就是最简单的字符设备驱 动,通常嵌套在 platform 总线驱动中,实现复杂的驱动,     

        所有的MISC设备驱动主设备号都是10不同的设备使用不同的次设备号。随着linux字符驱动的不断增加,设备号变得越来越紧张,尤其是主设备号,MISC设备驱动就是为了解决这个问题的。MISC设备会自动创建cdev,不需要我们以前那样手动创建,因此采用MISC设备驱动可以简化字符设备驱动的编写。我们需要向linux注册一个miscdevice设备,miscdevice是一个结构体。

         我们知道当我们使用cdev函数的时候,需要主设备号(major),次设备号(minor)还有字符设备操作集(fops)这三个变量。所以我们使用MISC的时候,也需要这三个变量。主设备号会固定为10,linux系统已经使用了一些次设备号,定义在include/linux/miscdevice.h 文件中。

        我们在使用的时候可以从这些预定义的子设备号中挑选一个,当然也可以自己定义,只要这个子设备号没有被其他设备使用接口。

        当我们设置好了miscdevice以后就需要使用misc_register函数向系统注册一个MISC设备,此函数原型如下:

         misc:要注册的MISC设备

        返回值:负数代表失败,0代表成功

        以前我们需要自己调用一堆函数去创建设备,比如下面的函数         现在我们可以直接使用misc_register一个函数来完成上面的4个函数的工作,当我们卸载设备驱动模块的时候需要调用misc_deregister函数来注销MISC设备

         以前注销设备驱动的时候,我们需要调用一堆的函数来删除此前创建的cdev,设备等等内容,如下所示:

/* MISC设备结构体 */
static struct miscdevice beep_miscdev = {
	.minor = MISCBEEP_MINOR,
	.name = MISCBEEP_NAME,
	.fops = &miscbeep_fops,
};

//放在probe函数里面
ret = misc_register(&beep_miscdev);

//放在remove函数里面
/* 注销misc设备 */
misc_deregister(&beep_miscdev);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值