基于misc框架的驱动分析

本文详细介绍了Linux内核中的misc框架,用于处理难以分类的杂散设备如蜂鸣器、ADC等。misc设备本质上是字符设备,通过/dev下的设备文件访问file_operations结构体。文章探讨了使用misc框架的条件,即在menuconfig中添加框架模块,并解析了misc框架的实现原理,包括misc_init函数的角色和所有misc设备共用主设备号10的特点。最后,通过蜂鸣器驱动的例子展示了如何利用misc_register接口实现驱动。
摘要由CSDN通过智能技术生成

基于misc框架的驱动分析

所谓的misc设备,就是很难于分类的杂散类设备,比如蜂鸣器、adc等。
一般来说,misc设备都是字符设备,所以led也能划分入misc设备,led驱动也能用misc设备驱动实现,这也印证了驱动的实现是自由的。
其本质是:通过读写/dev内的设备文件,来间接访问file_operations结构体内的函数,从而实现操作硬件

通过对比普通字符设备驱动的结构图,我们不难发现,misc框架是对普通字符设备驱动的一次封装罢了,它们从本质上并没有什么不同
这里写图片描述

值得注意的一点:因为历史原因,在这个版本的misc框架中,所有的misc设备公用一个主设备号(都是10),它们之间以次设备号互相区分。所以在框架中使用register_chrdev注册了一个主设备号为10的设备,而在驱动中device_create创建设备文件主设备号都为10,次设备号不同

1.misc框架接口的使用条件

  • 如果要使用内核的框架来写驱动的话,必须要在menuconfig中添加框架模块,这样才能够调用框架接口函数

2.misc框架接口的实现原理

  • misc.c这个文件提供了有关misc框架的接口,里面是misc框架模块
  • misc_init是框架模块的加载函数,它主要负责了创建misc类,和misc设备的注册
static int __init misc_init(void)
{

    /*无关代码就不贴了*/
    ...

    /*创建misc类*/
    misc_class = class_create(THIS_MODULE, "misc");

    /*无关代码就不贴了*/
    ...

    /*misc设备的注册*/
    if (register_chrdev(MISC_MAJOR,"misc",&misc_fops))
        goto fail_printk;

    misc_class->devnode = misc_devnode;
    return 0;

    /*无关代码就不贴了*/
    ...
}
  • 关于misc设备的注册,有一个值得注意的地方。因为历史原因,在这个版本的misc框架中,所有的misc设备公用一个主设备号(都是10),它们之间以次设备号互相区分。所以上面那段代码中,使用字符设备旧注册接口(详见两种注册方式),注册了一个名为misc的设备,其实是把我们所有的misc设备都注册了
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值