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 结构的指针
};

调用class_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设备注册示例代码》

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

正在起飞的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值