整理--Misc类设备驱动

知识整理–MISC类设备驱动

misc类设备的本质是字符设备,在驱动框架中使用register_chrdev注册了一个主设备号为10的设备

misc类设备介绍

  1. 何为misc

(1)中文名:杂散设备
(2)/sys/class/misc
(3)典型的字符设备。misc是对原始的字符设备注册接口的一个类层次的封装,很多典型字符设备都可以归类到misc类中,使用misc驱动框架来管理
(4)像LED一样也有一套驱动框架,内核实现一部分(misc.c,led是led-class.c),驱动实现一部分(x210-buzzer.c)

  1. 涉及文件

/drivers/char/misc.c
/driver/char/buzzer/x210-buzzer.c

misc驱动框架源码分析

源码框架的主要工作:注册misc类,使用老接口注册字符设备(主设备号10),开放device注册的接口misc_register给驱动工程师

驱动框架模块的注册

在框架中使用register_chrdev注册了一个主设备号为10的设备,而在设备驱动中device_create创建设备文件主设备号都为10,次设备号不同,从而实现分类(分为misc类)。我们也可以模仿这种方式创建自己的分类,但是其实不简单,还有好多东西需要积累!

以下文件位于/drivers/char/misc.c:

pic.5-5-01

misc_open:分析misc_open,发现其最终指向某一个设备对应的miscdevice结构体变量中的file_operations结构体变量中的open。(没具体分析应用层打开misc类设备是通过这里的open间接调用具体的open,还是直接调用某一具体misc设备的open)

开放出来的注册接口

misc_register

以下文件位于/drivers/char/misc.c:

pic.5-5-02

struct miscdevice:misc类设备的抽象

misc_list:内核维护的管理misc设备类的链表,将来添加一个设备就往这个链表添加相应的miscdevice的结构体变量的地址(指针)

misc设备驱动源码分析

以misc类设备蜂鸣器为例

定义一个struct miscdevice结构体变量并进行填充,然后调用驱动框架提供的misc_register进行注册。

下列代码位于/driver/char/buzzer/x210-buzzer.c:

pic.5-5-03

miscdevice

pic.5-5-04

x210_pwm_ioctl

pic.5-5-05
pic.5-5-06

x210_pwm_open/x210_pwm_close

pic.5-5-07

static struct semaphore lock/down_trylock(&lock)/up(&lock):信号量使用旧式接口,关于信号量的使用可以看内核源码如何使用

板载蜂鸣器驱动测试

确认/dev目录下有buzzer设备,没有需要make menuconfig 进行配置(确保子Makefile和子Kconfig相关变量相一致)

简单测试app_buzzer.c:

pic.5-5-09

注意0:关于文中涉及到的内核链表可以参考这篇文章《内核链表实现分析与使用(双向环形链表)》

注意1:register_chrdev和device_creator的区别。register_chrdev是向内核维护的一个指针数组添加一个字符设备抽象对应的地址,来注册驱动;device_create是利用给的设备号和类名去创建设备文件(创建后的设备文件位于/dev)。

注意2:分析LED驱动框架源码的时候,并没有register_chrdev,只有class_create和device_creator,而且走的是attribute路线。所以用attribute方式实现的驱动只能通过/sys/class下的文件进行访问,详细可以查看这篇文章谈论attribute驱动实现方式(及device_create与设备节点的关系)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值