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结构体的主要内容,如果未能解决你的问题,请参考以下文章

结构体struct,类class

C++——class类和struct结构体的唯一区别

关于c#的结构体struct与class的区别

Swift结构体(Struct)

Swift中 Class和Struct的区别

Swift-Class和Struct的区别(结构体和类的区别)