USB驅動程式的匹配分析

2021-06-22 20:29:36 字數 1785 閱讀 5101

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 驅動程式的例子沒有弄懂,看到一大堆資料夾結構和源程...