switch_class
1. switch_class简介
实现:drivers/switch/switch_class.c
典型应用:drivers/switch/switch_gpio.c
switch_class用于在/sys/class/switch提供name和state两个属性文件,在state改变时通过uevent上报KONJECT_CHANGE事件来通知应用程序state的状态更新了。
通常用于简单的GPIO类事件的驱动何通知,有点类似于输入子系统(但是需要uevent的支持)。
使用例子:如s5p_tvout_hpd.c中用于监听HDMI的hpd引脚并向App上报state改变的事件。
2.驱动的使用方法
(1) 定义核心结构: struct switch_dev sdev; (2) 注册 sdev.name = "XXX"; /* * 这两个函数回调可设可不设,cat name和state文件时若这两个 * 函数存在则会分别调用若没有就使用默认的打印函数,也就是 * 说作用就是控制打印格式的等。 */ sdev.print_state sdev.print_name switch_dev_register(struct switch_dev *sdev); (3)设置state的状态 /* * 当驱动中检测到state的状态改变时,使用下面函数将 * state设置到sdev->state中,这个函数里面会向App上 * 报一个uevent事件。 */ switch_set_state(struct switch_dev *sdev, int state); 根据体的使用见源码。
4. App的使用方法
当监听到对应的uevent事件后去读取/sys/class/switch/$(name)/state文件获取新的状态然后进行对应的处理。
5.总结
(1) kobject_uevent_env(&(hpd_misc_device.this_device->kobj), KOBJ_CHANGE, envp); 可以使用这个上报更多的项。
(2) 有多种方法向用户空间上报数据:sysfs、procfs、debugfs、设备节点、uevent。
用户空间配置内核USB:configfs
可以使用uevent+sysfs属性文件的形式向App提供数据,其中uevent提供阻塞式监听机制,sysfs提供数据,此时不需要/dev下的设备节点。
(3) 设备节点创建过程
switch_dev_register(struct switch_dev *sdev) switch_class = class_create(THIS_MODULE, "switch"); /*device_create并不会触发/dev/下的设备节点的创建*/ sdev->dev = device_create(switch_class, NULL, MKDEV(0, sdev->index), NULL, sdev->name); device_create_file(sdev->dev, &dev_attr_state); device_create_file(sdev->dev, &dev_attr_name);
注意:
device_create并不会触发/dev/下的设备节点的创建,而是在/sys/class/switch下创建一个设备,可以根据这个设备在/sysfs目录下添加属性文件。在/dev/下创建设备节点的操作应该是device_add()函数触发的,因为其内部使用kobject_uevent_add("ADD");向用户空间发送数据,ueventd根据这个信号来创建设备节点。
(4) led_class类也是只有/sys属性文件,没有/dev/下的设备节点。
posted on 2019-05-21 12:02 Hello-World3 阅读(594) 评论(0) 编辑 收藏 举报
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!