![](https://csdnimg.cn/release/download_crawler_static/4651184/bg6.jpg)
15. 15 handler->name, kobject_name(&dev->dev.kobj), error);
16. 16 return error;
17. 17 }
下面对该函数进行简要的分析。
第 03 行,定义了一个 input_device_id 的指针。该结构体表示设备的标识,标识中存储了设
备的信息,其定义如下:
1. struct input_device_id {
2.
3. kernel_ulong_t flags; /*标志信息*/
4. __u16 bustype; /*总线类型*/
5. __u16 vendor; /*制造商 ID*/
6. __u16 product; /*产品 ID*/
7. __u16 version; /*版本号*/
8. ...
9. kernel_ulong_t driver_info; /*驱动额外的信息*/
10. };
第 05 行,首先判断 handle 的 blacklist 是否被赋值,如果被赋值,则匹配 blacklist 中的数据
跟 dev->id 的数据是否匹配。blacklist 是一个 input_device_id*的类型,其指向 input_device_ids
的一个表,这个表中存放了驱动程序应该忽略的设备。即使在 id_table 中找到支持的项,也
应该忽略这种设备。
第 07~09 行,调用 input_match_device()函数匹配 handle->>id_table 和 dev->id 中的数据。
如果不成功则返回。handle->id_table 也是一个 input_device_id 类型的指针,其表示驱动支
持的设备列表。
第 10 行,如果匹配成功,则调用 handler->connect()函数将 handler 与 input_dev 连接起来。
3.input_match_device ()函数
input_match_device ()函数用来与 input_dev 和 handler 进行匹配。handler 的 id_table 表中定
义了其支持的 input_dev 设备。该函数的代码如下:
1. 01 static const struct input_device_id *input_match_device(const struct
2. input_device_id *id,
3. 02 struct input_dev *dev)
4. 03 {
5. 04 int i;
6. 05 for (; id->flags || id->driver_info; id++) {
7. 06 if (id->flags & INPUT_DEVICE_ID_MATCH_BUS)
8. 07 if (id->bustype != dev->id.bustype)