usb 分析(1)

 


 
 
 usb 分析(1)
 
 2011-7-5 22:03:14
 
 usb驱动要做的第一件事就是向usb系统进行注册
 
 在框架代码中是如下描述的
 
 static int __init usb_skel_init(void)
{
 int result;

 /* register this driver with the USB subsystem */
 result = usb_register(&skel_driver);
 if (result)
  err("usb_register failed. Error number %d", result);

 return result;
}

调用core中的方法进行注册了这样一个驱动

static struct usb_driver skel_driver = {
 .name =  "skeleton",
 .probe = skel_probe,
 .disconnect = skel_disconnect,
 .id_table = skel_table,
};


需要注意

为了使用热插拔功能
  
  需要使用这样一个id表
 
   /* table of devices that work with this driver */
 static struct usb_device_id skel_table [] = {
  { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) },
  { }     /* Terminating entry */
 };
 MODULE_DEVICE_TABLE(usb, skel_table);
 
 
skel_write

确定写入的大小

 if (down_interruptible(&dev->limit_sem)) {
  retval = -ERESTARTSYS;
  goto exit;
 }
 
 限制urb的数目
 
 分配一个urb
  usb_alloc_urb
 
 使用usb_fill_bulk_urb 将回调函数关联起来
 
 接着 提交这个urb
 
 usb_submit_urb
 
 usb_hcd_submit_urb  

你可能感兴趣的:(框架,struct,Module,table)