Chinaunix首页 | 论坛 | 博客
  • 博客访问: 48316
  • 博文数量: 8
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 16
  • 用 户 组: 普通用户
  • 注册时间: 2018-11-14 17:00
文章分类
文章存档

2018年(8)

我的朋友

分类: LINUX

2018-11-26 15:28:31

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驱动注册成字符设备驱动提供给用户程序。
阅读(2678) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~