歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux基礎 >> Linux教程 >> Linux下USB從設備使用gadget API

Linux下USB從設備使用gadget API

日期:2017/2/28 17:11:52   编辑:Linux教程

最近在做Linux下USB從設備的驅動,程序寫的差不多了,做一個整理小結。歡迎交流,如有錯誤請指正,謝謝!--Jason

一、USB從設備驅動介紹

USB總線上主要有三類設備:主控制器(Host Controller, such as EHCI、UHCI、OHCI)、集線器(hub)和設備(device)。Host controller(HC)負責總線的管理,是總線的指揮官,總線上一切傳輸都是由HC發起的,支持OTG的Device也能發起傳輸;Hub是總線的節點,用來擴展總線上可接入設備的數量,對於驅動來說是透明的;Device就是各種各樣的設備了,每個設備都有自己的功能,比如U盤、USB攝像頭等等。

Linux下主機端USB設備的驅動(device driver)編寫的資料有很多,LDD3中有相應的介紹。主要是通過內核中USB core這個模塊與設備交互。本文只介紹運行Linux的嵌入式USB設備驅動的編寫。因為Host端已經使用了device driver一詞,為了避免混淆,使用USB gadget driver一次表示從設備驅動。In USB protocol interactions, the device driver is the master (or client driver) and the gadget driver is the slave (or function driver).

Linux USB gadget driver API定義了一個通用的gadget driver的接口,gadget driver通過API與底層USB controller driver通信。該API屏蔽了底層硬件的不同,使gadget driver注重功能的實現,盡量與硬件無關。Slave端系統的架構如下圖所示:

其中,gadgetfs提供給用戶空間程序直接與USB device controller交互的能力。

二、相關資料

USB gadget API Layer的相關資料:

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

2. 內核中/KernelDoc/gadget/目錄下的文檔

3.最重要的就是/include/linux/usb_gadget.h文件,該文件中有gadget API接口數據結構和方法的詳細定義及注釋。

Gadget Driver的例子:

4. 內核/drivers/usb/gadget/目錄下有一些gadget driver的例子,zero.c為最簡單的例子,file_storage.c是存儲設備的gadget driver。

Copyright © Linux教程網 All Rights Reserved