linux驱动结构之class及相关结构体

设备类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);
用于注销

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值