• 自动创建设备节点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);
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    class_destroy()函数

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

    class_destroy(cls);
    
    • 1

    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");
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    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));
        }
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

  • 相关阅读:
    SpringMVC04-SpringMVC获取请求参数
    R语言ggplot2可视化:基于aes函数中的group参数绘制分组折线图并添加数据点(散点)、geom_point函数中配置数据点形状、大小、颜色、填充色等
    设计模式-适配器模式
    n个数取出r个数排列
    AcWing 188. 武士风度的牛
    计算机设计大赛 深度学习中文汉字识别
    Quill编辑器实现原理初探
    Django5+React18前后端分离开发实战05 序列化
    010:连续跌3天,同时这三天收盘价都在20日均线下,第四天上涨的概率--以京泉华为例
    electron程序私有化部署更新
  • 原文地址:https://blog.csdn.net/qq_45616716/article/details/132838699