当前位置: 首页 > news >正文

自动创建设备节点udev机制实现

自动创建设备节点udev机制实现过程:

1.当插入设备,内核会向udev发送一个事件,其中包含着设备的信息。
2.udev会根据收到的设备信息匹配相应的规则文件。
3.udev会根据规则文件中的配置,创建一个唯一的设备节点文件。通常存储在/dev/目录下。

实现自动创建设备节点的函数(udev机制)

class_create()函数

函数原型:struct class * class_create(struct module *owner,const char *name );
函数功能:用于动态的为一个设备创建一个类,会在/sys/class目录下创建一个新的文件夹用const char *name命名。
参数分析:① owner–>是一个结构体类型指针,指向创建的类对象本身,一般赋值为THIS_MODULE。② name–>是一个char类型指针,用于给struct class的创建出的目录命名。
返回值:失败返回错误码指针,成功返回申请的struct class对象的空间首地址。
函数示例:

 cls=class_create(THIS_MODULE,"mychrdev");if(IS_ERR(cls)){printk("向上提交目录失败\n");return -PTR_ERR(cls);}

class_destroy()函数

函数原型:void class_destroy(struct class *cls);
函数功能:用于删除clss_create()创建出来的设备类。
参数分析:struct class结构体类型的变量,代表设备的类。
函数示例:

class_destroy(cls);

device_create()函数

函数原型:struct device *device_create(struct class *class, struct device *parent,dev_t devt, void *drvdata, const char *fmt, …);
函数功能:动态拆功能键一个设备对象,并且对该对象进行初始化。再将该对象加入Linux内核系统的设备驱动程序模型中。
参数分析:① class代表需创建在那个类下。② parent代表设备的父设备。③ devt代表设备号。④ drvdata代表设备肯会使用到的一些数据。⑤ fmt代表设备节点名。
返回值:失败返回错误码指针,成功返回创建的设备对象。
函数示例:

    for(i=0;i<3;i++){dev=device_create(cls,NULL,MKDEV(major,i),NULL,"mychrdev%d",i);if(IS_ERR(dev)){printk("向上提交设备节点信息失败\n");return -PTR_ERR(dev);}}printk("向上提交设备节点信息成功\n");

device_destroy()函数

函数原型:void device_destroy(struct class *class, dev_t devt);
函数功能:用于删除由device_ccreate()创建出的设备对象。
参数分析:① class代表需要销毁的设备类。② devt代表设备号。
返回值:无返回值。
函数示例:

    int i;for(i=0;i<3;i++){device_destroy(cls,MKDEV(major,i));}

基本流程:首先用class_create()函数创建一个设备类,再用device_create()函数创建类下的设备,由device_destroy()函数来销毁设备节点信息,最后用class_destroy()函数小虎i目录信息。

http://www.lryc.cn/news/165094.html

相关文章:

  • 目标检测YOLO实战应用案例100讲-基于小样本学习和空间约束的濒危动物目标检测
  • 苹果数据恢复软件:Omni Recover Mac
  • 树回归CART
  • zemax色差与消色差
  • 成绩定级脚本(Python)
  • 骨传导耳机的危害有哪些?会损害听力吗?
  • Redis模块二:缓存分类 + Redis模块三:常见缓存(应用)
  • Revit SDK 内容摘要: 8.0 -8.1
  • 列表和字典练习
  • iwebsec靶场 文件包含漏洞通关笔记2-文件包含绕过(截断法)
  • 【基于Cocos Creator实现的赛车游戏】9.实现汽车节点的控制逻辑
  • 蓝蓝设计为教育行业提供软件UI交互设计服务
  • Java从入门到精通-类和对象(二)
  • Python解析MDX词典数据并保存到Excel
  • 线性代数的本质(四)
  • FreeMarker详细介绍
  • 房地产小程序 | 小程序赋能,房地产业务数字化升级
  • Databend 开源周报第 110 期
  • 开源大模型ChatGLM2-6B 1. 租一台GPU服务器测试下
  • SQL10 用where过滤空值练习
  • JVM--Hotspot Architecture 详解
  • ThreadLocal功能实现
  • Linux编辑器-vim使用
  • 自助式数据分析平台:JVS智能BI功能介绍(二)数据集管理
  • 《5G技术引领教育信息化新革命》
  • cmake学习过程记录
  • Vue3、Vite使用 html2canvas 把Html生成canvas转成图片并保存,以及填坑记录
  • centos yum源配置(CentOS7 原生 yum 源修改为阿里 yum 源)
  • linux————ansible
  • 初识Java 8-1 接口和抽象类