<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>
關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設計應用 > 基于Linux的USB從設備驅動(dòng)研究

基于Linux的USB從設備驅動(dòng)研究

作者: 時(shí)間:2009-12-07 來(lái)源:網(wǎng)絡(luò ) 收藏


0 引言
是英文Universal Serial Bus的縮寫(xiě),意為通用串行總線(xiàn)。是一種快速、雙向、同步、低成本、動(dòng)態(tài)可連接的串行接口。現在已經(jīng)廣泛應用到各種設備上,尤其是手持設備,幾乎都采用了USB接口?,F在,USB即可用來(lái)與其他設備連接后高速地傳遞數據,又可用來(lái)充電,使手持設備可以發(fā)揮U盤(pán)、MODEM、無(wú)線(xiàn)網(wǎng)卡等作用。
事實(shí)上,USB只是主機和外圍設備之間的連接。如何來(lái)促使這種連接發(fā)揮作用,就需要驅動(dòng)程序。驅動(dòng)程序主要解決硬件“需要提供什么功能”以及“如何使用這些功能”。在linux系統中,USB設備可以作為主機使用,也可作為從設備使用。對應的USB驅動(dòng)程序有兩種主要的類(lèi)型:宿主系統上的驅動(dòng)程序和設備上的驅動(dòng)程序。從宿主的觀(guān)點(diǎn)來(lái)看(例如普通的左桌面計算機),宿主系統的USB驅動(dòng)程序控制插入其中的USB設備,而USB設備的驅動(dòng)程序則控制該設備如何作為一個(gè)USB設備和主機通信。

本文引用地址:http://dyxdggzs.com/article/202610.htm


1 USB設備基礎
USB設備的構成包括配置接口和端點(diǎn),以及USB驅動(dòng)程序如何綁定到USB接口上。端點(diǎn)是USB通信最基本的形式,USB端點(diǎn)只能是往一個(gè)方向傳送數據,即從主機到設備(稱(chēng)為輸出端點(diǎn))或者從設備到主機(稱(chēng)為輸入端點(diǎn)),故可以看作是單向管道。USB有四種不同的類(lèi)型,分別對應不同的傳輸類(lèi)型:控制、中斷、批量、等時(shí)。其次接口,USB端點(diǎn)被綁定即為接口。USB的一個(gè)接口只處理一種USB邏輯連接;一個(gè)USB設備可以有多個(gè)接口,不同的接口可以代表不同的功能,因此,功能不同的USB接口需要不同的驅動(dòng)程序。另外就是配置,USB接口本身被綁定為配置。一個(gè)USB設備可以有多個(gè)配置,而且可以在配置之間切換以改變設備的狀態(tài);一個(gè)時(shí)刻只能激活一個(gè)配置,怛一個(gè)配置通常具有一個(gè)或者更多的接口。
USB設備可由許多不同的邏輯單元組成,實(shí)際上,也就是這三種邏輯單元組合而成的。內核中的USB代碼一般要用URB (usbrequst block)與USB設備通信。URB用struct urb結構體描述,它能以一種異步的方式往/從特定的USB端點(diǎn)發(fā)送/接收數據。USB程序可能會(huì )為單個(gè)端點(diǎn)分配許多的URB,也可能對許多不同的端點(diǎn)重用單個(gè)URB,這取決于驅動(dòng)的需要。當USB驅動(dòng)程序只發(fā)送或接收一些簡(jiǎn)單的USB數據時(shí),可以使用兩個(gè)很簡(jiǎn)單的接口函數:usb_bulk_msg、usb_control_msg。


2 USB程序的結構
圖1所示是環(huán)境下USB驅動(dòng)的總體結構。從圖l中可以看到:在主機側層次結構中,實(shí)現USB驅動(dòng)有兩類(lèi)方式:USB主機控制器驅動(dòng)和USB;USB主機控制驅動(dòng)主要控制插入其中的USB設備,主機控制器可以分為三類(lèi),分別對應于三種USB主控制器;USB設備驅動(dòng)則用于控制USB設備如何與主機通信;USB核心負責USB驅動(dòng)管理和協(xié)議處理的主要工作。

USB核心向上可為設備驅動(dòng)提供編程接口,向下可為USB主機控制器驅動(dòng)提供編程接口;它可以通過(guò)全局變量維護整個(gè)系統的USB設備信息,從而完成設備的熱插拔控制和總線(xiàn)數據傳輸控制等驅動(dòng)。
另外,在從設備側,內核中的USB設備側驅動(dòng)程序可分為3個(gè)層次:USB設備控制器(UDC)驅動(dòng)程序、Gadget API和Gadget驅動(dòng)程序;UDC驅動(dòng)程序可直接訪(fǎng)問(wèn)硬件,控制USB設備和主機間的底層通信,并向上層提供和硬件相關(guān)的操作回調函數。不同的設備控制器硬件有不同的設備控制器驅動(dòng)程序;Gadget驅動(dòng)主要控制USB設備功能的實(shí)現,它使用Gadget API傳遞控制信息給UDC驅動(dòng)程序,以便實(shí)現具體功能。
Gadget API是設備控制器的控制功能抽象接口,Gadget驅動(dòng)程序可以試用Gadget API,它可以把下層的UDC驅動(dòng)程序和上層Gadget驅動(dòng)程序相隔離,以使得在linux系統中編寫(xiě)USB設備側驅動(dòng)程序時(shí),能夠把功能的實(shí)現和底層通信相分離。
如果要在S3c24.10上實(shí)現大存儲類(lèi)從設備,則需要運行file_storage.c和s3c2410_udc.c這兩個(gè)驅動(dòng)程序。file_stoarge.c具體控制USB設備功能的實(shí)現,它使用Gadget API來(lái)控制s3c2410.c以實(shí)現其功能。s3c2410.c驅動(dòng)程序可直接訪(fǎng)問(wèn)硬件,以控制USB設備和主機間的底層通信,同時(shí)向上層提供和硬件相關(guān)操作的回調函數。

linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)

上一頁(yè) 1 2 下一頁(yè)

關(guān)鍵詞: Linux USB 設備驅動(dòng)

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>