Device Classes
设备类描述一种类型的设备,如音频或网络设备。已标识以下设备类:每个设备类定义一组语义和编程接口,该类的设备都遵循这些接口。设备驱动程序是特定总线上特定设备的该编程接口的实现。
Programming Interface
typedef int (*devclass_add)(struct device *);
typedef void (*devclass_remove)(struct device *);
一个典型设备的定义
struct device_class input_devclass = {
.name = "input",
.add_device = input_add_device,
.remove_device = input_remove_device,
};
注册
int devclass_register(struct device_class * cls);
void devclass_unregister(struct device_class * cls);
Devices
当设备绑定到驱动程序时,它们将添加到该驱动程序所属的设备类中。在驱动程序模型核心之前,一旦设备初始化,这通常会在驱动程序的probe()回调期间发生。现在,它是从核心完成probe()回调之后发生的。
该设备在该类中枚举。每次将设备添加到类中时,该类的devnum字段都会递增并分配给该设备。该字段永远不会减少,因此,如果将设备从类中删除并重新添加,它将收到不同的枚举值。
允许该类为设备创建特定于类的结构,并将其存储在设备的class_data指针中。设备类中没有设备列表。每个驱动程序都有其支持的设备列表。设备类别具有该特定类别的驱动程序的列表。要访问该类中的所有设备,请遍历该类中每个驱动程序的设备列表。
Device Drivers
设备驱动注册到内核当中的时候,他们将会被添加到设备类中。驱动程序通过设置结构device_driver::devclass 字段来指定它所属的类。
sysfs directory structure
在sfsfs文件夹下,有一个classs文件夹
[root@imx6ull:/sys/class]# ls
ata_device firmware mem rc thermal
ata_link gpio misc regulator tty
在该类中注册的驱动程序在drivers /目录中获得一个指向该驱动程序目录(在其总线目录下)的符号链接:
class/
`-- input
|-- devices
`-- drivers
`-- usb:usb_mouse -> ../../../bus/drivers/usb_mouse/
每个设备在devices /目录中都有一个符号链接,该链接指向物理层次结构中的设备目录:
class/
`-- input
|-- devices
| `-- 1 -> ../../../root/pci0/00:1f.0/usb_bus/00:1f.2-1:0/
`-- drivers