MTP的全稱是Media Transfer Protocol(媒體傳輸協議),它是微軟公司提出的一套媒體文件傳輸協議。早在智能手機普及前,數碼相機和MP3播放器等都使用了MTP的前身PTP(Picture Transfer Protocol)進行媒體文件傳輸,Android從3.0開始支持MTP。html
(1)既然能夠經過MTP把智能設備看成U盤使用,那麼它和咱們經常使用的USB大容量存儲(USB Mass Storage,簡稱UMS)有何不一樣呢?android
UMS模式下,PC操做存儲設備的粒度是設備塊(FAT block),而非文件系統。什麼意思?此處舉一個簡單例子。當Android手機經過UMS將sdcard掛載到PC後,PC就擁有對sdcard的絕對控制權。這樣,手機就沒法同時訪問sdcard了。這種作法帶來的後果就是Camera或Music程序將因沒有外部存儲空間而提示沒法進行操做。這也是Android早期版本中一個很明顯的特色。另外,因爲PC在操做sdcard時可能弄壞其文件系統,這將致使sdcard從新掛載到手機後不能被識別。web
若是Android手機的sdcard以MTP模式掛載到PC機上,sdcard的控制權其實仍是屬於手機。只不過智能手機經過MTP協議向PC機構建了一個虛擬文件系統。PC機操做其中的文件時,都會經過標準MTP協議向智能手機發起請求。另外,Android把MTP功能集成在MediaProvider中,其好處是PC機操做(例如拷貝或刪除等)媒體文件時,媒體數據都會及時更新到媒體數據庫中。而UMS模式下,當sdcard掛載回手機後,Android還得花較長時間從新掃描媒體文件以更新媒體數據庫。數據庫
(2)MTP的好處還有不少,例如它可判斷PC機拷貝的媒體文件是否受目標手機支持,甚至能夠觸發對應的轉碼程序將其轉換成手機支持的格式。不過和UMS相比,MTP也有不足之處:傳輸大文件的速度較慢;MTP不能直接修改文件自己,只能先拷貝到本地修改,完畢後再拷貝回去;除了Windows外,Linux和MacOS對MTP支持還不是很完善。windows
(3)MTP協議介紹,MTP的使用者包括兩個部分,分別是Initiator和Responder網絡
Initiator:主要是指USB Host,例如PC機,筆記本等。協議規定全部MTP操做只能由Initator發起。
Responder:通常是諸如數碼相機、智能手機等存儲媒體文件的設備。Responder在MTP中的做用就是處理Initator發起的請求。同時,它還會根據自身狀態的變化發送Event以通知Initiator。數據結構
MTP協議棧由下到上分別是:
Pyshical Layer(物理層):物理層在MTP協議中用來傳輸數據。目前有三種物理層可供MTP使用。它們分別是USB:其主要特色是傳輸文件,同步媒體文件時速度快,並且能夠邊工做邊充電,這是目前用的最多的一種方式;IP:基於IP的MTP(簡稱MTP/IP)將經過UPnP來匹配和發現設備。它是家庭網絡中是最理想的傳輸方式;Bluetooth:MTP/BT是最省電,同時也是速度最慢的一種傳輸方式,用處較少。
傳輸層:MTP中,數據傳輸格式遵循PTP協議
命令層:實現了MTP協議中的各類命令。架構
(4)android3.1多了三個大包:android.hardware.usb 、android.mtp 、android.net.rtp。app
A,android.mtp:讓鏈接的camera和其餘設備,能夠直接使用PTP(圖像傳輸協議)或MTP(媒體傳輸協議)保持鏈接,上層app能夠接收到通知,從而管理這些設備的文件和存儲傳輸等。它爲咱們提供了定義PTP和MTP的MtpConstants,描述USB host總線上鏈接的PTP或MTP設備的MtpDevice,封裝MTP設備信息的MtpDeviceInfo,和該對象的信息的MtpObjectInfo,還有MTP設備上存儲單元信息的封裝MtpStorageInfo 。框架
B,android.hardware.usb:支持經過USB鏈接到Android供電設備的外設數據通訊。中央類是UsbManager,它提供了識別和使用USB設備和USB配件的通信方法。應用程序能夠獲取一個UsbManager實例,而後用於鏈接的設備或配件的清單查詢、管理、通訊。
C,android.net.rtp:內置RTP(實時傳輸協議)協議棧,應用程序可使用它來管理交互數據流。應用程序提供VOIP,一鍵通,會議和音頻流,在網絡可用的前提下,可使用這些API來啓動會話和傳輸,或接收數據。最簡單的用法即單個遠程終端和本地。
(5)WIndows 7系統自帶MTP驅動程序,能夠直接使用;Windows XP系統則須要安裝驅動程序。首先將XP系統的Windows Media Player版本升級至wmp11,最新的版本自帶了MTP驅動。若是升級完後還沒法識別,則須要手動修改inf文件,位置在c:\windows\inf\wpdmtp.inf。查看你的MTP設備的VID和PID,添加下面的對應內容:
[Generic.NTx86]
%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP
%GenericMTP.DeviceDesc%=MTP, USB\VID_XXXX&PID_XXXX&MI_00
........................................
[Generic.NTamd64]
%GenericMTP.DeviceDesc%=MTP, USB\MS_COMP_MTP
%GenericMTP.DeviceDesc%=MTP, USB\VID_XXXX&PID_XXXX&MI_00
之而就能夠安裝上這個驅動程序了
==========================================USB CDC/USBnet(ECM, NCM, ACM) ===============================
USB CDC-ACM (Abstract Control Model), CDC-ECM (Ethernet Networking Control Model), CDC-NCM (Network Control Model), OBEX (Object Exchange) and WCM-Device Management USB class and function drivers
(1)CDC-ACM (Abstract Control Model) allows any communication device to provide a serial communication interface (e.g modem devices that send and receive AT commands).
The CDC ACM driver exposes the USB device as a virtual modem or a virtual COM port to the operating system.The driver enables sending both data and AT commands, either through ACM (separating data and AT commands over different channels) or through Serial Emulation (passing the AT commands as is and as part of the data stream).
/lib/modules/$(uname -r)/kernel/drivers/usb/class目錄下看到cdc-acm.ko文件。
(2)CDC-ECM (Ethernet Networking Control Model) offers device manufacturers to interface as a standard NIC (Network Interface Card) device. This interface is usually adopted by high speed LAN networking devices allowing high speed Ethernet data transfer over USB.
The ECM (Ethernet Networking Control Model) protocol is used for exchanging Ethernet-framed data between the device and host. A CDC ECM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.
A general use case of a CDC ECM device is a point-to-point Ethernet adapter to a LAN/WLAN.
(3)CDC-NCM (Network Control Model).The NCM (Network Control Model) protocol is used for exchanging High Speed Ethernet-framed data between the device and host. A CDC NCM compliant device exposes itself as a virtual NIC to the host operating system. The NIC is assigned with a MAC and an IP address.
A general use case of a CDC NCM device is a Wireless Network Adapter which supports 3.5G/4G networks such as: HSPA+ and LTE.
(4)OBEX (Object Exchange) is compliant with the Wireless Mobile Communication OBEX function model, supporting OBEX applications over USB.
(5)WMC-Device Management is compliant with the Device Management function model, supporting a minimal AT command based control model.
(6)RNDIS - provides CDC like communication capabilities on Windows PCs supporting the Microsoft RNDIS protocol. Please refer to the RNDIS webpage for more info.
==========================================USB gardget ===============================
(1)背景知識
Linux kernel2.6以上的版本中,USB設備驅動的接口改成了gadget,包括作主和作從的驅動內容。Linux支持鏈接各類USB從設備,同時也支持本身做爲設備插入到其餘主機當中。最典型的例子就是AndroidOS的手機,插入電腦能夠被識別爲U盤之類的設備。
爲了不與做爲主機時支持的"設備驅動(USB Device Driver)"一詞混淆,Linux給這部分的實現取名爲"Gadget"。內核源碼的目錄爲\drivers\usb\gadget,裏面包含了內核所支持的不一樣類型的USBDevice Controller (UDC)驅動的實現,以及框架和不一樣gadget的實現。
(2) 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。
能夠用一句簡單的話去歸納三層的關係:USB Gadget功能層調用USB設備層的接口,USB設備層調用USB設備控制器驅動層的接口,而後USB設備控制器驅動層回調USB設備層,USB設備層回調USB Gadget功能層。
參考原文:http://blog.csdn.net/yiyaaixuexi/article/details/6542702#
參考原文:http://hi.baidu.com/aokikyon/blog/item/e77161e7ae190d31b83820e1.html
參考原文:http://bbs.meizu.cn/thread-4933555-1-1.html