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