生活随笔
收集整理的這篇文章主要介紹了
USB学习6---Linux Android USB软件架构设计
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
下面學(xué)習(xí)針對(duì)高通平臺(tái)的HS-USB(HS:high speed高速)堆棧(stack)軟件架構(gòu)設(shè)計(jì)和源代碼布局的細(xì)節(jié)。
?
Android HS-USB堆棧基于下面幾點(diǎn):
Gadget driver framework(gadget驅(qū)動(dòng)架構(gòu))支持外設(shè)模式(Peripheral mode)
新的gadget驅(qū)動(dòng)架構(gòu)在android2.0及之后的版本實(shí)現(xiàn)。Google剛開(kāi)始開(kāi)發(fā)一個(gè)新的架構(gòu)叫function framework( 只用在android1.6版本) 。因?yàn)閘inux內(nèi)核中的gadget framework 不支持復(fù)合設(shè)備(composite devices)。后來(lái)gadget framework添加對(duì)了對(duì)復(fù)合設(shè)備的支持,google并對(duì)gadget framework做了重大的修改以支持組合開(kāi)關(guān)(composition switch)
兼容EHCI主控制器驅(qū)動(dòng),以支持host模式。 On-The-Go(OTG驅(qū)動(dòng))。
?
USB stack
Android HS-USB OTG堆棧基于ID引腳檢測(cè)來(lái)支持OTG模式,HS-USB OTG core代表HS-USB控制器。
OTG driver
OTG驅(qū)動(dòng)首先被加載,由它建立(set up)host controller driver(HCD主控制器驅(qū)動(dòng))和device controller driver(DCD設(shè)備控制器驅(qū)動(dòng))的transceive struct(收發(fā)器結(jié)構(gòu)),在OTG注冊(cè)了HCD和DCD后,OTG狀態(tài)機(jī)才生效。 根據(jù)連接到A/B USB連接器的Micro-A插頭(ID引腳接地,啟動(dòng)主模式)或Micro-B插頭(ID引腳懸空,啟動(dòng)從模式)來(lái)啟動(dòng)對(duì)應(yīng)的控制器驅(qū)動(dòng)(HCD或DCD)。 存取HS-USB OTG控制器寄存器來(lái)執(zhí)行USB操作。 USB(主/從)電源管理。 USB時(shí)鐘管理,比如,時(shí)鐘使能、關(guān)閉復(fù)位等。
?
Device controller driver
向下與HS-USB OTG控制器交互 執(zhí)行斷電操作,比如使能、關(guān)閉、入隊(duì)、出隊(duì)、刷新、停止等等。 執(zhí)行USB gadget操作,比如VBUS處理、VBUS pull up、遠(yuǎn)程喚醒等等。 充電檢測(cè)。
?
Gadget framework
USB設(shè)備模式驅(qū)動(dòng)框架(device mode driver) 支持多配制、多接口、符合設(shè)備和alternate接口設(shè)置,發(fā)展的可重用/組合的usb_function(一個(gè)描述配置功能的結(jié)構(gòu)體)實(shí)例,提供復(fù)合和多配置gadget的更簡(jiǎn)單設(shè)置。 此框架驅(qū)動(dòng)底層實(shí)現(xiàn)與硬件無(wú)關(guān)的USB功能(使用設(shè)備控制器驅(qū)動(dòng)的調(diào)用),例如,在gadget.h中定義了對(duì)象和方法。 對(duì)于特定控制器,支持端點(diǎn)在編譯時(shí)可配置。 在linux中,大多數(shù)gadget驅(qū)動(dòng)(例如串口gadget驅(qū)動(dòng))有一個(gè)連接到linux驅(qū)動(dòng)或框架的上界(upper boundary)
對(duì)應(yīng)usb\gadget下android.c、composite.c。
u_serial.c - utilities for USB gadget "serial port"/TTY support,u_serial.c的u表示utilities(工具)。
f_serial.c - generic USB serial function driver,f_serial.c的f表示function。
?
Function drivers
Function驅(qū)動(dòng)包括modem(比如USB 接口的4G網(wǎng)卡),NMEA(美國(guó)國(guó)家海洋電子協(xié)議,比如USB接口的GPS),大容量存儲(chǔ)等。
對(duì)應(yīng)usb\gadget\function源碼。
?
Host controller driver(Host控制器驅(qū)動(dòng))
驅(qū)動(dòng)底層部分和HS-USB OTG控制器交互。 兼容EHCI 使用USB HCD框架注冊(cè)Host控制器驅(qū)動(dòng)和使用EHCI包裝器函數(shù)(wrapper函數(shù))來(lái)支持root hub、管理I/O請(qǐng)求與關(guān)聯(lián)設(shè)備資源、管理底層事務(wù)(URB to transfer descriptor queue,例如USB請(qǐng)求塊(Universal Request Block)來(lái)傳遞描述符隊(duì)列)
對(duì)應(yīng)usb\host代碼。
?
USB core
USB core的實(shí)現(xiàn)與底層硬件無(wú)關(guān)。 對(duì)類驅(qū)動(dòng)(class driver)隱藏大多數(shù)USB協(xié)議相關(guān)項(xiàng)。 與USB類驅(qū)動(dòng)的交互。
對(duì)應(yīng)usb\core代碼。
?
USB PHY driver(物理層協(xié)議)
分離PHY具體操作的新層。 HCD/DCD/OTG層可以引用多個(gè)PHY實(shí)例。
對(duì)應(yīng)kernel\msm-3.18\drivers\usb\phy文件夾的源代碼。USB PHY driver應(yīng)該在OTG driver和OTG core之間,第1張圖我有備注,下面這種圖可以體現(xiàn)出來(lái)
Class drivers類驅(qū)動(dòng)
類驅(qū)動(dòng)包括大容量存儲(chǔ)、HID、HUB等。對(duì)應(yīng)\kernel\msm-3.18\drivers\usb\class下代碼。
?
?
總結(jié)
以上是生活随笔 為你收集整理的USB学习6---Linux Android USB软件架构设计 的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。