2012-09-19 01:30:39
| 分類:|舉報
|字型大小訂閱
static struct usb_device_id usb_mouse_id_table = ,
};
#define usb_inte***ce_info(cl, sc, pr) \
.match_flags = usb_device_id_match_int_info, \
.binte***ceclass = (cl), \
.binte***cesubclass = (sc), \
.binte***ceprotocol = (pr)
#define usb_device_id_match_int_info \
(usb_device_id_match_int_class | \
usb_device_id_match_int_subclass | \
usb_device_id_match_int_protocol)
所以:
.match_flags = usb_device_id_match_int_class | usb_device_id_match_int_subclass | usb_device_id_match_int_protocol
.binte***ceclass = 3
.binte***cesubclass = 1
.binte***ceprotocol = 2
現在我們試著分析匹配函式:
//我們是usb介面
intf = to_usb_inte***ce(dev);
usb_drv = to_usb_driver(drv);
usb_match_id(intf, usb_drv->id_table);
//id->binte***ceclass不為空
usb_match_one_id(inte***ce, id)
usb_match_device(dev, id)
我們好好看看這個函式:
int usb_match_device(struct usb_device *dev, const struct usb_device_id *id)
全都不匹配,於是繼續往下走:
if ((id->match_flags & usb_device_id_match_int_class) &&
(id->binte***ceclass != intf->desc.binte***ceclass))
return 0;
if ((id->match_flags & usb_device_id_match_int_subclass) &&
(id->binte***cesubclass != intf->desc.binte***cesubclass))
return 0;
if ((id->match_flags & usb_device_id_match_int_protocol) &&
(id->binte***ceprotocol != intf->desc.binte***ceprotocol))
return 0;
在這幾句中如果裝置和驅動全部吻合的話,就匹配成功,返回1!
USB驅動程式分析
1.對於每個pc來說,都有乙個或者多個稱為主機 host 控制器的裝置,該主機控制器和乙個根集線器 hub 作為乙個整體。2.每個host控制器其實就是乙個pci裝置,掛載在pci匯流排上。驅動開發人員應該給host控制器提供驅動程式,用usb hcd結構體表示。3.usb host控制器都會自帶乙...
USB裝置驅動程式
一.usb載入式流介面驅動要點分析 為了支援不同型別的外圍裝置,wince平台提供了具有定製介面的流介面驅動程式模型。因為大部分usb外圍裝置由於功能性更適合流介面驅動的結構,所以一般都採用載入式流介面驅動程式模型來開發usb裝置驅動程式。1 usb系統結構分析 wince下usb系統軟體由兩層組成...
USB裝置驅動程式導讀
隨著 usb裝置的不斷增加,我們這些開發人員也就多了對 usb裝置進行驅動程式開發的工作。但是對於很多初學者來說,存在以下三個困難 一是對wince 的驅動程式結構了解得太少,沒辦法得心應手的專注於驅動程式的開發工作 二是對wince 自帶的usb 驅動程式的例子沒有弄懂,看到一大堆資料夾結構和源程...