1、usb设备与驱动程序的匹配过程
a.先安装驱动,后插入设备
这种情况下,usb host controller完成对设备的枚举过程后,将设备的信息封装到一个usb_interface结构体中。usb core根据该结构体提供的设备信息(Vendor_id & Product_id)去遍历所有的驱动程序,找到支持该设备的驱动,并调用该驱动中的probe函数。最终将该驱动与设备关联,完成驱动程序的注册。
b.先插入设备,后安装驱动
在插入设备后,usb_host_controller已经完成对设备的枚举,usb core中已经存有描述该设备信息的结构体 usb_interface。驱动安装时,调用static int __init usb_skel_init(void)中的usb_register(skel_driver),将该驱动的相关信息(主要是id_table)提交给usb core,usb core根据提供的信息区遍历所有的设备,找到相关联的设备。再调用probe函数完成驱动的注册
2、usb_register()
usb_register(&skel_driver),这里只是将包含该驱动信息的skel_driver()结构体提交给usb core,以便usb core能够遍历该驱动程序
static struct usb_driver skel_driver = {
.name = "skeleton",
.probe = skel_probe,
.disconnect = skel_disconnect,
};
当该驱动与设备比配时,usb core能够调用skel_driver提供的probe函数
3、usb_register_dev()
当usb core成功的将设备和驱动程序关联上之后,调用驱动程序中的probe函数。probe函数再调用usb_register_dev(interface, &skel_class),获得次设备号,将usb驱动注册成字符设备驱动提供给用户程序。
阅读(4637) | 评论(0) | 转发(1) |