linux驱动结构之class及相关结构体
来源:互联网 发布:sql select 多个表 编辑:程序博客网 时间:2024/06/07 02:57
设备类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);
用于注销
- linux驱动结构之class及相关结构体
- linux驱动结构之class及相关结构体
- linux驱动结构之class及相关结构体
- linux驱动结构之kobject及相关结构
- Linux驱动模型之class结构解析
- linux块设备驱动之相关结构体
- linux i2c驱动相关结构体
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析
- 平台设备驱动 -- 相关函数及结构体
- Linux设备驱动--块设备(二)之相关结构体
- Linux设备驱动--块设备(二)之相关结构体
- Linux设备驱动--块设备(二)之相关结构体
- Linux设备驱动--块设备(二)之相关结构体
- Linux设备驱动--块设备(二)之相关结构体
- linux块设备驱动之相关结构体间的关系
- android图片特效处理之模糊效果
- fork与exit、_exit的配合使用
- SVN强制提交LOG的配置说明
- 模拟java动态代理
- 基于测量报告的目标定位
- linux驱动结构之class及相关结构体
- mybatis基本环境搭建
- 指针常见问题
- Oracle 中rank() 对表中的数据进行分级排序
- 补遗篇之文件I/O
- ios app开发属性设置基础教程
- VMware下RedHat联网
- Python 解释型语言
- MyEclipse下J2EE开发规范总结说明