自动创建
-
内核检测到设备插入后,会发送一个uevent事件到内核中,并提供有关硬件设备的信息。
-
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_MODULEname:向上提交的目录名
返回值:成功返回申请的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:当前申请的对象前一个节点的地址,不知道就填NULLdevt:设备号 主设备号<<20|次设备号
dridata:申请的device对象的私有数据,填写NULLfmt:向上提交的设备节点名
...:不定长参数
返回值:成功返回申请到的device对象首地址,失败返回错误码指针,指向4K预留空间4.销毁设备节点信息
void device_destroy( struct class *class, dev_t devt)功能:销毁设备节点信息
参数:
class:向上提交目录时得到的类对象指针devt:向上提交设备节点信息时提交的设备号
返回值:无