微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > linux总线、设备和设备驱动的关系

linux总线、设备和设备驱动的关系

时间:12-15 来源:互联网 点击:

用担心哪个模块拥有那些属性,而且信息的表示也比较友好。为了管理类,驱动程序核心导出了一些接口,其目的之一是提供包含设备号的属性以便自动创建设备节点,所以udev的使用离不开类。类函数和结构与设备模型的其他部分遵循相同的模式,可与前三篇文章类比。

(1)管理类的接口和注册注销函数

类由 struct class 的结构体来定义:

struct class {

const char *name; *每个类需要一个唯一的名字, 它将显示在 /sys/class 中*/

struct module *owner;

struct class_attribute *class_attrs;

struct device_attribute *dev_attrs;

struct kobject *dev_kobj;

int (*dev_uevent)(struct device *dev, struct kobj_uevent_env *env);

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);

struct pm_ops *pm;

struct class_private *p;

};

int class_register(struct class *cls);

void class_unregister(struct class *cls);

struct class_attribute {

struct attribute attr;

ssize_t (*show)(struct class *cls, char *buf);

ssize_t (*store)(struct class *cls, const char *buf, size_t count);

};

CLASS_ATTR(_name,_mode,_show,_store);

int class_create_file(struct class *cls, const struct class_attribute *attr);

void class_remove_file(struct class *cls, const struct class_attribute *attr);、

(2)类设备,类存在的真正目的是给作为类成员的各个设备提供一个容器,成员由struct class_device 来表示,暂没用到。

(3)类接口

类子系统有一个 Linux 设备模型的其他部分找不到的附加概念,称为“接口”,可将它理解为一种设备加入或离开类时获得信息的触发机制,结构体如下:

struct class_interface {

struct list_head node;

struct class *class;

int (*add_dev) (struct device *, struct class_interface *);

void (*remove_dev) (struct device *, struct class_interface *);

};

int class_interface_register(struct class_interface *class_intf);

void class_interface_unregister(struct class_interface *class_intf);

设定class的好处:设备驱动一般在注册的时候都会调用此类class的一些函数,主要作用就是在sys目录里面创建一些节点,比如cd到/sys/class下面可以看到这一类的设备,与这个相关的就是一些kobjects。当然对于一个新设备,可以注册进一个class也可以不注册进去,如果存在对应class的话注册进去更好。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top