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

本文介绍了Linux内核中的设备管理机制,包括uevent事件触发设备类创建,structclass用于存储设备信息,以及device_create和device_destroy函数用于设备节点的创建和销毁过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述
设备插入后,系统检测到后 会发送要给uevent事件进入内核中 并提供设备的信息,再接收到uevent事件后会创建设备类并盛情一个struct class对象并初始化并在根目录下创建一个文件夹 名称为。/dev/class/类名
在内核中申请struct device对象(向上提交节点信息)
udev创建设备节点

#include<linux/device.h>
1.向上提交目录信息
struct class * class_create(struct module *owner,const char *name );
功能:申请一个设备类并初始化,向上提交目录信息
参数:
owner:指向当前内核模块自身的一个模块指针,填写THIS_MODULE
name:向上提交的目录名
返回值:成功返回申请的struct class对象空间首地址,失败返回错误码指针
    /*
    在内核空间最顶层会预留4K空间,当struct class函数调用失败后函数会返回一个指向这4K空间的指针
    bool __must_check IS_ERR(__force const void *ptr)
    功能:判断指针是否指向4K预留空间
    参数:要判断的指针
    返回值:如果指着指向4K预留空间返回逻辑真,否则返回逻辑假
     long __must_check PTR_ERR(__force const void *ptr)
     功能:通过错误码指针得到错误码
     ex:struct class_create *cls=struct class_create(THIS_MODULE,"mycdev");
     if(IS_ERR(cls))
     {
         printk("向上提交目录失败\n");
         return -PRT_ERR(cls);     
     }
    */
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|次设备号
    /*
        MKDEV(主设备号,次设备号):根据主设备号和次设备号得到设备号
        MAJOR(dev):根据设备号获取主设备号
        MINOR(dev):根据设备号获取次设备号
    */
dridata:申请的device对象的私有数据,填写NULL
fmt:向上提交的设备节点名
...:不定长参数   
返回值:成功返回申请到的device对象首地址,失败返回错误码指针,指向4K预留空间

4.销毁设备节点信息
void device_destroy(struct class *class, dev_t devt)
功能:销毁设备节点信息
参数:
class:向上提交目录时得到的类对象指针
devt:向上提交设备节点信息时提交的设备号
返回值:无
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值