1. 程式人生 > >linux usb驅動——Gadget代碼介紹

linux usb驅動——Gadget代碼介紹

dma usb驅動 硬件 維護 and get 基於 開發 版本

一般網上關於介紹USB Gadget的資料都是基於Linux2.6.32或在這之前的版本,作者在關註了Linux2.6.37和Linux3.0.4版本的內核,USB Gadget的一些API已經與Linux2.6.32的不同了。但是那些關鍵的數據結構還是一樣滴。 Linux USB Gadget分三層架構: 層次關系從上到下 一層:USB Gadget功能層。BSP/Driver開發者通常是要實現這一層,從而實現一個具體的設備驅動,如Anddroid在此層實現了adb,mtp,mass_storage等。瀏覽參考關註此層代碼時,會發現“composite”是此層的關鍵字,此層中關鍵的數據結構是:struct usb_composite_driver。這一層的驅動文件一般為:driver/usb/gadget/android.c(android實現的)或driver/usb/gadget/serial.c(傳統Linux實現的USB轉串口)。 二層:USB設備層。這一層是Linux內核開發維護者實現的,與我們沒太大關系,不用我們操心,我們只關心其的一些接口就行。瀏覽參考關註此層時,會發現“gadget”是此層的關鍵字,此層的關鍵數據結構是:usb_gadget_driver,usb_composite_dev。這層主要的一個驅動文件為:driver/usb/gadget/composite.c 三層:USB設備控制器驅動層。這一層主要是與CPU、CPU USB控制器有關,與硬件緊密相關,這一層也比較頭痛,主要它和USB控制器牽扯在一起,涉及有寄存器、時鐘、DMA等等。但是這一層往往是由芯片廠商去實現。我們一般僅需在板級文件中處理好所需要的USB接口即可。這層的關鍵字就是“UDC”,主要驅動文件命名含“udc”關鍵字,一般與CPU或芯片廠商有關,如driver/usb/gadget/xxx_udc.c。

linux usb驅動——Gadget代碼介紹