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 *); }; 3. 功能及内部逻辑解
struct class_interface是这样的一个结构:它允许class driver在class下有设备添加或移除的时候,调用预先设置好的回调函数(add_dev和remove_dev)。那调用它们做什么呢?想做什么都行(),由具体的class driver实现。 该结构的定义如下: 1structclass_interface {2structlist_head node;3structclass*class;45int(*add_d...
; struct class_interface就是之前被串在class->p->class_interface上的类接口的结构。用于描述设备类对外的一种接口。node就是class->p->class_interfa 22、ce链表上的节点。class是指向所属class的指针。add_dev()是在有设备添加到所属class时调用的函数。当然,如果class_interface比设备更晚添加到class,也会...
int bus_create_file(struct bus_type* bus, struct bus_attribute* attr):为指定总线添加属性; void bus_remove_file(struct bus_type* bus, struct bus_attribute* attr):删除指定总线上的指定属性; 备注:struct bus_type、struct bus_attribute结构均定义在/usr/src/kernels/2.6.18-8.el5-i686/include/li...
*/ int device_add(struct device *dev) { struct device *parent = NULL; struct kobject *kobj; struct class_interface *class_intf; int error = -EINVAL; dev = get_device(dev); if (!dev) goto done; // 初始化 device的 私有数据 if (!dev->p) { error = device_private_init(dev); ...
void class_interface_unregister(struct class_interface *class_intf); /*一个类可注册多个接口*/ 设定class的好处:设备驱动一般在注册的时候都会调用此类class的一些函数,主要作用就是在sys目录里面创建一些节点,比如cd到/sys/class下面可以看到这一类的设备,与这个相关的就是一些kobjects。当然对于一个新设备,可以注...
Linux字符设备编程(五)之struct class 在前面我们已经介绍了两种方法来实现在编写设备驱动程序时由系统自动给我们创建设备文件的方法。现在我们接着讲解第三种方法. 一.前言 内核中定义了struct class结构体,一个struct class结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存...
struct device dev; // 设备文件 u32 phy_id; // PHY ID struct phy_c45_device_ids c45_ids; bool is_c45; bool is_internal; bool has_fixups; bool suspended; enum phy_state state; // PHY状态 u32 dev_flags; phy_interface_t interface; // PHY接口 ...
structphy_c45_device_idsc45_ids; boolis_c45; boolis_internal; boolhas_fixups; boolsuspended; enumphy_state state;// PHY状态 u32 dev_flags; phy_interface_tinterface;// PHY接口 intaddr;// PHY 总线地址(0~31) intspeed;// 速度 intduplex;// 双工模式 ...
(struct usb_function *, unsigned interface); // disable gadget function驱动,主机复位、主机重新配置gadget、断开连接时使用 void (*disable)(struct usb_function *); // 用于特殊接口的控制请求 int (*setup)(struct usb_function *, const struct usb_ctrlrequest *); // 测试某些设备类请求能否被处理 ...