调用通用usb设备驱动的匹配函数
calling the match function of generic usb device driver
我正在研究 generic.c 与 Linux 内核中的 USB 子系统相关的内容。 USB设备驱动程序(usb_generic_driver)被usb核心(usb_init)注册。
usb_device_driver 结构有 id_table(struct usb_device_id *id_table) 成员,但我没有在源代码中找到这个 id_table 在 usb_generic_driver 结构中被填充和赋值。
struct usb_device_driver {
const char *name;
bool (*match) (struct usb_device *udev);
int (*probe) (struct usb_device *udev);
void (*disconnect) (struct usb_device *udev);
int (*suspend) (struct usb_device *udev, pm_message_t message);
int (*resume) (struct usb_device *udev, pm_message_t message);
const struct attribute_group **dev_groups;
struct usbdrv_wrap drvwrap;
const struct usb_device_id *id_table;
unsigned int supports_autosuspend:1;
unsigned int generic_subclass:1;
};
如果通用驱动程序没有“id_table”,那么如何调用匹配函数 (usb_generic_driver_match)。如果 id_table 是为通用驱动程序定义的,你能帮我找到驱动程序的 id_table 吗?
而且我不明白你的疑惑。 USB 通用驱动程序根据定义 generic。这意味着如果通过实际匹配(在各个驱动程序中有 ID 表)没有找到驱动程序,它将被使用。
设备匹配首先发生在 bus level. Which is covered by usb_device_match()
call that checks first is it device or interface and then tries match by ID table if present. Since for generic driver it does not have match table, but has specific ->match()
callback 上,这被称为最后的手段。
我正在研究 generic.c 与 Linux 内核中的 USB 子系统相关的内容。 USB设备驱动程序(usb_generic_driver)被usb核心(usb_init)注册。
usb_device_driver 结构有 id_table(struct usb_device_id *id_table) 成员,但我没有在源代码中找到这个 id_table 在 usb_generic_driver 结构中被填充和赋值。
struct usb_device_driver {
const char *name;
bool (*match) (struct usb_device *udev);
int (*probe) (struct usb_device *udev);
void (*disconnect) (struct usb_device *udev);
int (*suspend) (struct usb_device *udev, pm_message_t message);
int (*resume) (struct usb_device *udev, pm_message_t message);
const struct attribute_group **dev_groups;
struct usbdrv_wrap drvwrap;
const struct usb_device_id *id_table;
unsigned int supports_autosuspend:1;
unsigned int generic_subclass:1;
};
如果通用驱动程序没有“id_table”,那么如何调用匹配函数 (usb_generic_driver_match)。如果 id_table 是为通用驱动程序定义的,你能帮我找到驱动程序的 id_table 吗?
而且我不明白你的疑惑。 USB 通用驱动程序根据定义 generic。这意味着如果通过实际匹配(在各个驱动程序中有 ID 表)没有找到驱动程序,它将被使用。
设备匹配首先发生在 bus level. Which is covered by usb_device_match()
call that checks first is it device or interface and then tries match by ID table if present. Since for generic driver it does not have match table, but has specific ->match()
callback 上,这被称为最后的手段。