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

自动创建设备节点udev机制实现_第1张图片

 自动创建

  1. 内核检测到设备插入后,会发送一个uevent事件到内核中,并提供有关硬件设备的信息。

  2. udevd守护程序收到uevent事件后,创建一个设备类,(向上提交目录信息),会在内核中申请一个struct class对象,并且初始化,然后会在根目录下/dev/class下创建一个文件夹,/dev/class/类名

      3.创建一个设备对象,(向上提交设备节点信息),在内核中申请一个struct device对象,并且初始化,然后会在 /dev/class/类名创建一个存放设备节点信息的文件

        4.创建存放设备节点信息的文件后,系统会自动在驱动发起一个hotplug event事件,用户空间存在一个进程hotplug,hotplug会被唤醒,hotplug通知udev进程,udev会去创建的向上提交的设备节点信息目录里查询设备节点相关信息
        5.udev进程在/dev下创建设备节点

1.向上提交目录信息

struct class * class_create(struct module *owner,const char *name );

功能:申请一个设备类并初始化,向上提交目录信息
参数:owner:指向当前内核模块自身的一个模块指针,填写THIS_MODULE

        name:向上提交的目录名
返回值:成功返回申请的struct class对象空间首地址,失败返回错误码指针


 

2.销毁目录
void class_destroy( struct class *cls)功能:销毁目录信息
参数: cls:指向class对象的指针返回值:无
 

3.向上提交节点信息
struct device *device_create(struct class *class,struct device *parent,dev_t devt,

void *drvdata,const char *fmt,...)
功能:创建一个设备对象,向上提交设备节点信息
参数:
cls :向上提交目录时的到的类对象指针
parent:当前申请的对象前一个节点的地址,不知道就填NULL

devt:设备号  主设备号<<20|次设备号
dridata:申请的device对象的私有数据,填写NULLfmt:向上提交的设备节点名
...:不定长参数
返回值:成功返回申请到的device对象首地址,失败返回错误码指针,指向4K预留空间

4.销毁设备节点信息
void device_destroy( struct class *class, dev_t devt)

功能:销毁设备节点信息
参数:
class:向上提交目录时得到的类对象指针

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

返回值:无
 

你可能感兴趣的:(驱动开发)