通过动态申请设备号并加载设备驱动程序后, 可通过 /proc/devices 文件来查看主设备号,然后可以使用mknode命令来创建设备文件,或者在驱动程序里面动态创建设备文件
首先, 分配一个 struct class 结构体变量, 并且调用class_create函数来初始化
dev_class = class_create(owner, name)
extern struct class * __must_check __class_create(struct module *owner,
const char *name,
struct lock_class_key *key);
#define class_create(owner, name)
({
static struct lock_class_key __key;
__class_create(owner, name, &__key);
})
这个类存放于sysfs下面,一旦创建好了这个类,再调用 device_create(…)函数来在/dev目录下创建相应的设备节点。这样,加载模块的时候,用户空间中的udev会自动响应 device_create(…)函数,去/sysfs下寻找对应的类从而创建设备节点。
然后使用 device_create()来创建设备节点
extern struct device *device_create(struct class *cls,
struct device *parent,
dev_t devt, void *drvdata,
const char *fmt, ...)
__attribute__((format(printf, 5, 6)));
当动态创建设备文件后,在卸载设备驱动程序时, 需要调用device_destroy() 和 class_destroy() 来销毁创间的设备节点和类
extern void device_destroy(struct class *cls, dev_t devt);
extern void class_destroy(struct class *cls);
阅读(2457) | 评论(0) | 转发(0) |