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