struct class结构体
Posted 正在起飞的蜗牛
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struct class结构体相关的知识,希望对你有一定的参考价值。
1、struct class结构体介绍
struct class结构体用来在/sys/class目录下描述一个类,将来同类的设备都放在一个类下面,作为类的一个设备;
参考博客:《字符设备驱动程序自动创建设备节点详解》;
2、struct class结构体定义
struct class
const char *name; // 类名称
struct module *owner; // 类所属的模块,比如 usb模块、led模块等
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); // 用于在设备发出 uevent 消息时添加环境变量
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; // 指向 class_private 结构的指针
;
调用device_create()函数创建一个类后会返回一个struct class结构体来描述类,我们可以给struct class结构体赋值来填充类,赋予类一些属性;
3、struct device_attribute结构体
struct attribute
const char *name; //文件的名字
struct module *owner; //所有者
mode_t mode; //文件的权限
#ifdef CONFIG_DEBUG_LOCK_ALLOC
struct lock_class_key *key;
struct lock_class_key skey;
#endif
;
struct device_attribute
struct attribute attr;
ssize_t (*show)(struct device *dev, struct device_attribute *attr,
char *buf); //读文件对应的方法
ssize_t (*store)(struct device *dev, struct device_attribute *attr,
const char *buf, size_t count); //写文件对应的方法
;
(1)struct device_attribute结构体是struct class结构体用来描述类下面的设备的属性的;
(2)效果:每一个类下面的设备(/sys/class/类名/设备名/)文件夹,都会自动创建相关的文件name,文件权限是mode,读取文件调用show方法,写入文件调用store方法;
参考博客: 《内核LED驱动框架讲解以及led设备注册示例代码》;
以上是关于struct class结构体的主要内容,如果未能解决你的问题,请参考以下文章