udev机制自动创建设备节点过程分析

发布于:2023-09-14 ⋅ 阅读:(77) ⋅ 点赞:(0)

1、创建设备文件的机制分类

mknod:手动创建设备节点的命令

devfs:可以用于创建设备节点,创建设备节点的逻辑在内核空间(内核2.4版本前使用)

udev:自动创建设备节点的机制,创建设备节点的逻辑在用户空间

mdev:轻量级的udev机制,用于一些嵌入式操作系统

2、udev机制创建设备节点过程分析

      第一步:  注册驱动,主设备号

      第二步:获取设备信息 

      第三步:创建一个设备类,并向上提供目录信息

API:struct class* class_create(struct module *owner,const char *name);                                          功能:创建一个设备类并初始化,向上提交目录信息

      参数:

        owner:指向当前内核模块自身的一个模块指针,填写THIS_MODULE                                           name:向上提交的目录名

        返回值:会预留一个内核空间最顶层的4k空间,失败会返回一个指向这个空间的指针

        bool __must_check IS_ERR(__force const void *ptr)

        功能:判断指针是否指向4k预留空间

        参数:要判断的指针       

        返回值:指向4k空间返回真,否则返回假   

   销毁目录:

void class_destroy(struct class *cls)

功能:销毁目录信息

参数:

cls:指向class对象的指针

无返回值

第四步、向上提交节点信息 

API:struct device *device_create(struct class  *class,struct device *parent,dev_t devt,void *drvdata,const char *fmt,...)

功能:创建一个设备对象,向上提交设备节点信息

参数:

cls:向上提交目录时的类对象指针

parent:当前申请对象前一个节点的地址,未知填NULL

devt:设备号   是主设备号+次设备号 

dridata:申请的device对象的私有数据,填NULL

fmt:向上提交的设备节点名

...:不定长参数

返回值:成功返回申请的device对象首地址,失败返回错误码指针,也是指向4k预留空间 

销毁设备节点信息

void device_destroy(struct class * class,dev_t devt)

功能:销毁设备节点信息

参数:

class:向上提交目录时得到的类对象指针

devt:向上提交设备节点信息时提交的设备号 

返回值:无                                                                                                                                                                                                                                                                                                                                                    


网站公告

今日签到

点亮在社区的每一天
去签到