函数:__class_create()
函数__class_create()用于动态创建设备的逻辑类,并完成部分相应字段的初始化,然后将其添加进Linux内核系统中。此函数的执行效果就是在目录/sys/class
下创建一个新的文件夹,此文件夹的名字为此函数的第二个输入参数,但此文件夹是空的。
文件包含:
#include <linux/device.h>
函数定义:
在内核源码中的位置:linux-3.19.3/drivers/base/class.c
函数定义格式:
struct class * __must_check __class_create(struct module *owner, const char*name, struct lock_class_key *key)
输入参数说明:
函数__class_create()有三个输入参数,分别解释如下:
- 参数
owner
是struct module结构体类型的指针变量,指向函数__class_create()即将创建的struct class类型对象的拥有者,一般赋值为THIS_MODULE,此结构体的详细定义见文件linux-3.19.3/include/linux/module.h。 -
参数
name
是char类型的指针变量,代表即将创建的struct class变量的名字,用于给struct class的name字段赋值。 -
参数
key
是struct lock_class_key结构体类型的变量,代表访问struct class类型变量的互斥锁。
返回参数说明:
函数__class_create()的返回值是新创建的逻辑类,此结构体的定义见文件linux-3.19.3/include/linux/device.h,如下所示:
struct class {
const char *name;
struct module *owner;
struct class_attribute *class_attrs;
const struct attribute_group **dev_groups;
struct kobject *dev_kobj;
int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);
char *(*devnode)(struct device *dev, umode_t *mode);
void (*class_release)(struct class *class);
void (*dev_release)(struct device *dev);
int (*suspend)(struct device *dev, pm_message_t state);
int (*resume)(struct device *dev);
const struct kobj_ns_type_operations *ns_type;
const void *(*namespace)(struct device *dev);
const struct dev_pm_ops *pm;
struct subsys_private *p;
}
其中:
- 字段
name
代表此class对象的名字,即创建的设备文件的文件名,此设备文件位于/dev目录下。 -
字段
owner
代表此class对象的拥有者,一般为THIS_MODULE。 -
字段
class_attrs
代表此class对象的属性。 -
字段
dev_groups
代表此class对象所对应的设备的属性。 -
字段
class_release
是一个函数指针,指向当此class对象被释放时调用的处理函数。 -
字段
dev_release
是一个函数指针,指向当此class对象所对应的逻辑设备被释放时调用的处理函数。 -
字段
p
代表class对象的私有数据段。
实例解析:
此函数需要与函数class_destroy()
配对使用,不能够单独测试。当单独测试时,第一次不会出现错误,但当第二次插入模块时就会出现错误,实例解析请读者参考酷客教程函数class_destroy()的分析文档。
酷客网相关文章:
评论前必须登录!
注册