這裏主要講的是Windows XP下(xià)USB驅動協議棧的整體(tǐ)結構,以及内部的一(yī)些重要數據結構。在寫這些東西時,參考了大(dà)牛Tiamo的相關論壇貼子 ,内容很多雷同,說是轉貼也不爲過。
USB協議棧是由如下(xià)幾個驅動文件構成的:
usbport.sys USB主機控制器共用驅動代碼庫,供miniport驅動調用。
usbhub.sys USB總線驅動,USB總線也是USB設備的一(yī)種。
usbehci.sys USB EHCI主機控制器驅動,它是屬于miniport驅動。
usbuhci.sys USB UHCI主機控制器驅動,它是屬于miniport驅動。
usbohci.sys USB OHCI主機控制器驅動,它是屬于miniport驅動。
usbd.sys USB設備驅動共用代碼庫,供USB設備驅動和總線驅動調用。
usbccgp.sys USB複合設備驅動。
usbstor.sys USB存儲設備驅動。
usbaudio.sys USB聲音設備驅動。
usbvideo.sys USB視頻(pín)設備驅動。
hidusb.sys USB HID設備驅動。
主機控制器驅動是USB協議棧的最底層驅動,在它之上就是USB總線驅動,再之上是USB設備驅動。
USB設備驅動上面呢,一(yī)般還有其它的驅動。象usbstor上面還有存儲設備class驅動,hidusb上面還有HIDclass驅動。不過這上面的驅動,就和USB的驅動協議棧沒有多大(dà)的關系了。而設備驅動和具體(tǐ)的設備類有千絲萬縷的關系,不是我(wǒ)們要讨論的重點。
這裏重點要讨論的是控制器和總線,這是USB驅動協議棧的核心。
我(wǒ)們知(zhī)道,USB2.0有EHCI控制器,USB1.1有UHCI和OHCI控制器。這樣一(yī)共有三種控制器,它們之間有什麽區别呢? 這要先說一(yī)說控制器的作用,USB協議棧并不是憑空而建立起來的,它下(xià)層就是PCI總線驅動(一(yī)般而言,也不一(yī)定非得是PCI總線),而控制器的作用就是和PCI總線打交道,将USB的功能和操作轉變成PCI總線上的一(yī)系列操作,同時還兼任着usb總線的日常管理。
不同的硬件廠商(shāng)都可以有它自己的一(yī)個控制器規範,這在USB協議出現早期尤爲突出。但這樣各自爲政畢竟對整個規範的發展不利,于是大(dà)家便開(kāi)始統一(yī)接口規範,這統一(yī)規範能滿足大(dà)家的絕大(dà)部分(fēn)需求,所以大(dà)家也就都用标準規範。USB 1.1時,就形成了OHCI和UHCI兩大(dà)陣營,而USB2.0時,則隻有EHCI了,顯然,大(dà)家還是覺得标準越少麻煩越少。
對比一(yī)下(xià)UHCI和OHCI,兩者都是提供對USB1.1協議的支持,隻不過,UHCI硬件實現相對較少而成本相對較低,但軟件驅動複雜(zá)度相對較高,所以,UHCI多用在PC上,OHCI多用在嵌入設備中(zhōng)。而 EHCI 則是伴随着USB 2.0規範一(yī)同出現(因爲大(dà)家都受夠了要同時支持兩大(dà)規範的痛苦),它同時也向下(xià)兼容UHCI和OHCI。
好了,廢話(huà)就說這麽多,再具體(tǐ)的網上可查。下(xià)面,就說說控制器驅動的事兒。各大(dà)控制器規範和底層PCI總線的接口差别比較大(dà),但它控制USB總線那一(yī)塊的功能都基本上差不多 -- 都是完全符合USB本身規範的。所以,各大(dà)控制器的驅動底層接口部分(fēn)是各自爲政,而USB總線管理部分(fēn)則被提煉出來,形成一(yī)個共同的代碼庫,名爲usbport.sys。也就是說,usbport.sys并不是一(yī)個獨立的驅動,而隻是一(yī)個供别人調用的動态鏈接庫。而這個動态鏈接庫由于實現了控制器驅動的絕大(dà)多數功能,所以,我(wǒ)們習慣地将它當作控制器驅動的主體(tǐ)。
講了usbport.sys是怎麽回事,順帶講講usbd.sys。usbd.sys和usbport.sys角色定位類似,它也隻是作爲一(yī)個動态鏈接庫供USB設備驅動和USB總線驅動使用。不過,由于usbd.sys實現的功能很有限,作用沒有usbport.sys那麽突出,所以就顯得比較邊緣化,在一(yī)般的讨論中(zhōng)将它忽略掉。
關于USB驅動棧的整體(tǐ)結構就講到這裏,後續會具體(tǐ)講講usbhub.sys和usbport.sys所實現的功能。
聯系電話(huà):020-87518715
聯系郵箱:services@picusit.com
公司名稱:鄭州易科計算機服務有限公司
公司地址:廣州市天河區龍口西路100号中(zhōng)明大(dà)廈1601