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:向上提交设备节点信息时提交的设备号
返回值:无