linux驱动重要结构,class及相关结构体 - Linux驱动结构学习笔记_Linux编程_Linux公社-Linux系统门户网站...

设备类struct class是一个设备的高级视图,它抽象出低级的实现细节。例如,驱动可以见到一个SCSI磁盘或者一个ATA磁盘,在类的级别,他们都是磁盘,类允许用户空间基于它们作什么来使用设备,而不是它们如何被连接或者它们如何工作。

struct class{

const char *name;   //类名称

struct module *owner;   //对应模块

struct subsystem subsys;   //对应的subsystem;

struct list_head children;   //class_device链表

struct list_head  interfaces;   //class_interface链表

struct semaphore  sem;   //用于同步的信号锁

struct class_attribute *class_attrs;   //类属性

int (*uevent)(struct class_device *dev,char **envp,int num_envp,

char *buffer,int buffer_size);   //事件

void (*release)(struct class_device *dev);   //释放类设备

void (*class_release)(struct class *class);    //释放类

}

调用函数:

int class_register(struct class *cls);

用于注册

void class_unregister(struct class *cls);

用于注销

class可以看成是一个容器,容器总包含了很多的class_device,每个都对应着一个具体的逻辑设备,并通过成员变量dev关联一个物理设备。定义为:

struct class_device

{

struct list_head node;

struct kobject  kobj;   //内嵌的kobject,用于计数

struct class   *class;   //所属的类;

dev_t   devt;   //dev_t设备号

struct class_device_attribute  *devt_attr;

struct class_device_attribute  uevent_attr;

struct device  *dev;   //如果存在,创建到/sys/devices相应入口的符号链接

void *class_data;   //私有数据

struct class_device  *parent;   //父设备

void (*release)(struct class_device *dev);   //释放对应类实际设备的方法

int(*uevent)(struct class_device *dev,char **envp,

int num_envp,char *buffer,int buffer_size);

char class_id[BUS_IO_SIZE];  //类标志

}

调用函数:

int class_device_register(struct class_device *class_dev);

用于注册

void class_device_unregister(struct class_device *class_dev);

用于注销

相关结构体

struct class_interface

{

struct list_head node;

struct class *class;   //所属的class

int (*add)(struct class_device *,struct class_interface *);  //设备加入时触发

void (*remove)(struct class_device *,struct class_interface *);//设备移出时触发

}

调用函数:

int class_interface_register(struct class_interface *class_intf);

用于注册

void class_interface_unregister(struct class_interface *class_intf);

用于注销0b1331709591d260c1c78e86d0c51c18.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值