日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

USB学习5---android usb驱动源代码目录说明

發布時間:2025/4/16 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 USB学习5---android usb驱动源代码目录说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

kernel\msm-3.18\drivers\usb下目錄內容

?

我們msm8937+android7.1平臺編譯out目錄下usb目錄下有編譯到的目錄如下:

我們先參考kernel\msm-3.18\drivers\usb\README對這些部分的介紹。列舉了一下usb目錄各個文件有什么作用。接下來就是看Kconfig、Makefile文件的內容了。任何linux下驅動模塊都必不可少的“地圖”。總結下這個兩個文件的作用吧,主要強調一下他倆的區別和聯系:

?

Makefile定義了根據該子目錄下的源碼文件構建目標文件的規則。

?

為了理解所有的Linux-USB框架,需要用到下面的資源

(1) Usb驅動代碼。

(2) USB2.0規范(網址www.usb.org),和一些補償性的文檔,比如關于USB OTG和不同設備類。USB2.0規范有的章節有很好的概述,和USB設備符合眾做周知的第9章。

(3) USB控制器的芯片規范。比如包括主控制器(PC、服務器等等上),外圍控制器(在帶有linux固件的設備中,像打印機或是手機),以及像以太網適配器這樣的硬件外圍設備。

(4) USB外圍功能對應的其他協議規范,一些是廠家特定的,其他是廠商共同制定的但又是www.usb.org團隊之外制定的標準。

USB驅動源代碼下的子目錄說明如下:

  • Core
  • USB host的核心代碼,包括usbfs文件和HUB類驅動(hub_wq)。對應配置項CONFIG_USB,我們平臺涉及的源代碼文件如下:

    usbcore-y := usb.o hub.o hcd.o urb.o message.o driver.o

    usbcore-y += config.o file.o buffer.o sysfs.o endpoint.o

    usbcore-y += devio.o notify.o generic.o quirks.o devices.o

    usbcore-y += port.o

    obj-$(CONFIG_USB)??????????? += usbcore.o

    ?

    配置了CONFIG_USB表示支持USB主機端(host side),然后需要根據硬件平臺支持的USB協議選擇HCD(Host Controller Driver,主控制器驅動),比如我們CPU帶有一個USB2.0高速端口,Type C,

    所以需要配置CONFIG_USB_EHCI_HCD為Y。對應host\ehci-hcd.c

    ?

    如果我們系統有一個USB設備端口,使用USB協議的外設端,參閱“USB gadget”框架。選擇了HCD后,要選擇我們將要使用的USB外設驅動。

    ?

    2. Host

    USB主控制器驅動,包括UHCI、OHCI、EHCI和其他可能專門用于嵌入式系統的部分。由CONFIG_USB_EHCI_HCD選項決定。

    obj-$(CONFIG_USB_EHCI_HCD) += ehci-hcd.o

    CONFIG_USB_EHCI_HCD=y,表示我們的USB主控制器支持USB2.0。

    ?

    obj-$(CONFIG_USB_EHCI_MSM) += ehci-msm.o

    CONFIG_USB_EHCI_MSM=y,啟動高通芯片集中USB主控制器的支持。Root HUB內置TT(Transaction Translator事務翻譯),此驅動依賴于OTG驅動來進行PHY初始化、時鐘管理、為VBUS供電和電源管理。

    ?

    3. Phy

    由CONFIG_USB_SUPPORT選項指定,此選項添加了對USB的核心支持。

    # Makefile for physical(PHY) layer USB drivers---通用代碼

    #

    obj-$(CONFIG_USB_PHY)????????????????? += phy.o

    obj-$(CONFIG_OF)??????????????????? += of.o

    obj-$(CONFIG_USB_OTG_WAKELOCK)??????????? += otg-wakelock.o

    obj-$(CONFIG_DUAL_ROLE_USB_INTF)???? += class-dual-role.o

    ?

    # transceiver(收發) drivers, keep the list sorted---和具體處理器平臺相關的收發數據相關

    obj-$(CONFIG_NOP_USB_XCEIV)????????????? += phy-generic.o

    obj-$(CONFIG_USB_MSM_OTG)??????? += phy-msm-usb.o

    obj-$(CONFIG_USB_MSM_HSPHY)???? ?? += phy-msm-hsusb.o

    obj-$(CONFIG_USB_MSM_SSPHY)???? ?? += phy-msm-ssusb.o

    obj-$(CONFIG_USB_MSM_SSPHY_QMP)???? += phy-msm-ssusb-qmp.o

    ?

    ?

    4. Gadget(小配件,小工具)

    USB外圍控制器驅動(對應上圖右邊的UDC驅動)和與UDC驅動交互的gadget驅動(對應上圖右邊的gadget function驅動)

    ?

    USB是一個主/從協議,作為host(比如PC,手機也可以)可以控制多達127個從設備,USB硬件是非對稱,這便于設置,我們不能將連接到“host端”的連接器連接到設備端。

    Linux可運行在host或設備端,這兩種情況下都需要一個低層總線控制器驅動。

    ?

    如果我們要讓linux運行在USB外網設備端,需要配置CONFIG_USB_GADGET=y。還需要為我們USB設備端總線控制器配置硬件驅動,和為我們外設協議配置對應的gadget驅動

    ?

    Linux-USB Gadget API Framework

    http://www.linux-usb.org/gadget/

    ?

    下面是單個USB驅動目錄,一個新的驅動應該增加到下面目錄下的第1級子目錄下。

    5. Image/:靜態圖像驅動,如掃描儀或數字攝像頭。

    6. ../input/:任何使用輸入子系統的驅動,如鍵盤,鼠標、觸摸屏、平板。

    7 ../media/:多媒體驅動,如攝像頭、音頻和任何其他和V4l子系統交互的其他驅動。

    8. ../net/:網絡驅動

    9. Serial/:USB轉串口驅動

    由CONFIG_USB_SERIAL決定,如果我們有一個USB設備提供同樣串口或者作為串口設備,并且我們需要連接它到我們產品的USB總線上(比如一個USB轉串口設備要連接到我們android手機上。),需要配置CONFIG_USB_SERIAL=y。

    ?

    涉及的主要源代碼:

    obj-$(CONFIG_USB_SERIAL)???????????????????? += usbserial.o

    usbserial-y := usb-serial.o generic.o bus.o

    ?

    10. Storage/:USB大容量存儲驅動

    由CONFIG_USB_STORAGE決定,如果我們想要連接USB大容量存儲設備到我們PC的USB端口,這是USB軟盤驅動器、USB硬盤、USB磁帶驅動器、USB CD-ROM、USB閃存設備和記憶棒等類似設備所需要的驅動。

    此選項既依賴于SCSI支持的啟用,為了支持更多USB存儲設備,我們可能還需要啟動SCSI設備驅動(BLK_DEV_SD選項)

    ?

    11. Class/:所有的USB設備驅動,這些驅動不適合上面的分類,作為特定的USB類設備工作。

    ?

    obj-$(CONFIG_USB_ACM)????????? += cdc-acm.o

    CONFIG_USB_ACM對應的驅動支持USB modem和ISDN適配器,它支持通訊設備類抽象控制模式接口(Communication Device Class Abstract Control Model interface,CDC ACM)。

    ?

    如果我們的modem /sys/kernel/debug/usb/devices描述符信息只報告"Cls=ff(vend.)",那么我們的modem不會使用這個驅動。

    ?

    12. Misc/:所有不適合上面分類的USB設備驅動

    13. Common

    提供USB主端和設備端公共的代碼。

    obj-$(CONFIG_USB_COMMON) ? += usb-common.o

    usb-common-y????????????????? ? += common.o

    ?

    14. Dwc3

    如果我們系統有一個基于DesignWare HSOTG IP Core的雙角色高速USB(a Dual Role Hi-Speed USB)控制器,可配置CONFIG_USB_DWC3=y。

    ?

    15. Mon

    USB抓包工具usbmon,對應CONFIG_USB_MON=y,此部分抓取在設備去和和HC驅動之間傳輸的USB數據包,便于debug和分析,詳細的使用和介紹參閱內核文檔usbmon.txt。

    ?

    下面給出USB2.0協議里兩張很重要的圖,總體了解host和device之間的通訊

    客戶端軟件的請求數據可以通過USB Host的buffer和USB device的endpoint傳遞。

    ?

    《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

    總結

    以上是生活随笔為你收集整理的USB学习5---android usb驱动源代码目录说明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。