news 2026/4/18 13:07:10

十八、使用class分类管理设备

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
十八、使用class分类管理设备

设备的大管家class

  • 使用class对硬件设备进行分类管理
  • class与用户空间守护进程udev/mdev协作,自动创建设备文件
设备驱动模型框图

  1. Linux内核启动的过程中会调用classes_init()函数在sysfs文件系统中创建一个名为class的文件夹。
  2. 我们在驱动中调用class_create()函数,在class文件夹下创建一个指定名称的分类文件夹(比如指定分类名为xxx)。
  3. 我们继续在驱动中调用device_create()函数,在指定的分类中又创建一个表示设备的文件夹(比如指定设备名为yyy)。调用这个函数的时候,我们会传入设备号,所以这个设备文件夹下会生成一个名为dev的设备属性文件存放设备号。
  4. device_create()函数除了创建/sys/class/xxx/yyy这个设备目录,还会调用kobject_uevent()函数给用户空间的udev/mdev守护进程发送一个新增设备的消息。udev/mdev收到这个消息后,会去读取/sys/class/xxx/yyy/dev属性文件中的设备号,然后调用mknod()函数在/dev目录下创建一个名为yyy的设备节点。
相关函数
创建一个class
class_create宏

include/linux/device.h

#defineclass_create(owner,name)\({\staticstructlock_class_key__key;\__class_create(owner,name,&__key);\})structclass*__class_create(structmodule*owner,constchar*name,structlock_class_key*key);
  • owner:一般设置为THIS_MODULE
  • name:kobject对象的名字,也即是目录的名称
  • struct class里面间接继承了kobject对象
在class下添加kobject对象
device_create()函数

include/linux/device.h

structdevice*device_create(structclass*class,structdevice*parent,dev_tdevt,void*drvdata,constchar*fmt,...);
  • class:新构建的class
  • parent:新kobject对象的上一层节点,一般为NULL
  • dev_t:属性文件记录该设备号
  • drvdata:私有数据,一般为NULL
  • fmt:变参参数,一般用来设置kobject对象的名字
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:33:46

EasyGBS如何运用流媒体技术提升安防监控效率?

随着信息技术的飞速发展,视频监控技术已成为维护公共安全和提升管理效率的重要手段。国标GB28181作为安防行业的统一设备接入与流媒体传输标准,为视频监控系统的互联互通提供了坚实的基础。国标GB28181算法算力平台EasyGBS作为一款基于RTSP、onvif、国标…

作者头像 李华
网站建设 2026/4/18 10:49:30

线控转向系统联合仿真与变传动比模块研究

线控转向系统 Carsim和Simulink联合仿真模型。 且一个基于横摆角速度增益不变的变传动比模块。 卖品包含Carsim完整数据库。 【该卖品的建模方法是 动力学法】 图中分别为角阶跃工况 和 双移线工况 汽车对应的响应曲线,并且与Carsim自带的机械转向对比图。 在汽车转…

作者头像 李华
网站建设 2026/4/18 8:07:09

基于协同过滤算法的小说阅读小程序任务书

毕 业 论 文(设 计)任 务 书论文(设计)题目:基于协同过滤算法的小说阅读小程序 学生姓名: 石铃烨 学  号: 1713212038 专  业: 计算机科学与技术 所在学院: …

作者头像 李华