android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget

时间:2022-10-20 22:32:21

MTP的全称是Media Transfer Protocol(媒体传输协议),它是微软公司提出的一套媒体文件传输协议。早在智能手机普及前,数码相机和MP3播放器等都使用了MTP的前身PTP(Picture Transfer Protocol)进行媒体文件传输,Android从3.0开始支持MTP。

(1)既然可以通过MTP把智能设备当作U盘使用,那么它和我们常用的USB大容量存储(USB Mass Storage,简称UMS)有何不同呢?

UMS模式下,PC操作存储设备的粒度是设备块(FAT block),而非文件系统。什么意思?此处举一个简单例子。当Android手机通过UMS将sdcard挂载到PC后,PC就拥有对sdcard的绝对控制权。这样,手机就无法同时访问sdcard了。这种做法带来的后果就是Camera或Music程序将因没有外部存储空间而提示无法进行操作。这也是Android早期版本中一个很明显的特点。另外,由于PC在操作sdcard时可能弄坏其文件系统,这将导致sdcard重新挂载到手机后不能被识别。

如果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支持还不是很完善。

(3)MTP协议介绍,MTP的使用者包括两个部分,分别是Initiator和Responder

android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget

Initiator:主要是指USB Host,例如PC机,笔记本等。协议规定所有MTP操作只能由Initator发起。
Responder:一般是诸如数码相机、智能手机等存储媒体文件的设备。Responder在MTP中的作用就是处理Initator发起的请求。同时,它还会根据自身状态的变化发送Event以通知Initiator。

android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget

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。

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

android的USB MTP && USB CDC/USBnet(ECM, NCM, ACM) && USB gardget的更多相关文章

  1. usb mtp激活流程【转】

    本文转载自:https://blog.csdn.net/kc58236582/article/details/46895901 废话少说, 先上两张时序图 , 图片有点大, 建议用新窗口打开或者另存到 ...

  2. USB驱动之CDC类的介绍与应用20160905

    USB的协议其实是很复杂的,如果要深入学习估计要一两年才能熟悉透.本文主要是讲如何使用官方已经写好的库进行二次开发,以达到我们自己使用的目的.我们知道USB可以用来接U盘,声卡,读卡器,鼠标键盘等等, ...

  3. Android系统编程入门系列之硬件交互——通信硬件USB

    在硬件交互的首篇对设备硬件的分类中,互联通信系列硬件主要用来与其他设备进行数据交互.从本文开始,将重点介绍该系列相关硬件. 互联通信系列硬件 根据硬件的可通信距离,由近及远分为USB.NFC.蓝牙.W ...

  4. qq2440启动linux后插入u盘出现usb 1-1: device descriptor read/64, error -110,usb 1-1: device not accepting address 8, error -110

    上位机:ubuntu14.04 64bit 下位机:qq2440 交叉编译器:arm-linux-gcc 3.4.1 下位机使用的linux内核版本:kernel2.6.13 1.插入u盘时错误信息如 ...

  5. USB 3.0规范中译本 第3章	USB 3.0体系结构概览

    本文为CoryXie原创译文,转载及有任何问题请联系cory.xie#gmail.com. 本章呈现USB 3.0体系结构和关键概念的概览.USB 3.0与前面版本的USB类似,因为它是线缆总线,支持 ...

  6. STM32F4 HAL Composite USB Device Example : CDC + MSC

    STM32F4 USB Composite CDC + MSC I'm in the process of building a USB composite CDC + MSC device on t ...

  7. Android USB Connections Explained: MTP, PTP, and USB Mass Storage

    Android USB Connections Explained: MTP, PTP, and USB Mass Storage Older Android devices support USB ...

  8. Android USB驱动源码分析(-)

    Android USB驱动中,上层应用协议里最重要的一个文件是android/kernel/drivers/usb/gadget/android.c.这个文件实现USB的上层应用协议. 首先包含了一些 ...

  9. Android手机USB调试安全闲扯(315晚会免费充电桩事件)

    前言       今年的又准时乖巧的观看了315晚会,与大家一同学习了各种发财致富的方式...咳.咳..学习防范违法行骗的各种手段.比较感兴趣的两个,一人脸识别,二公共充电桩安全隐患.第一个今天不扯, ...

随机推荐

  1. cache 浅析

    http://blog.chinaunix.net/uid-26817832-id-3244916.html   1. Cache Cache一词来源于法语,其原意是"藏匿处,隐秘的地方&q ...

  2. HTML练习----注册界面

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. Loadrunner基础:Loadrunner Vuser基本概念和应用

    学习示例 Loadrunner自带有WebTour的网站可以帮助初学者学习性能测试安装完Loadrunner以后进入到Program Files下的WebTour文件加,启动WebTour服务在浏览器 ...

  4. UVa 10054 The Necklace【欧拉回路】

    题意:给出n个珠子,珠子颜色分为两半,分别用1到50之间的数字表示, 现在给出n个珠子分别的颜色,问是否能够串成一个环.即为首尾相连,成为一个回路 判断是否构成一个环,即判断是否为欧拉回路,只需要判断 ...

  5. Win7刷新环境变量

    在“我的电脑”->“属性”->“高级”->“环境变量”中增加或修改环境变量后,需重启系统才能使之生效.有没有什么方法可让它即时生效呢? 下面介绍一种方法: 以修改环境变量“PATH” ...

  6. hadoop编译

    说明: hadoop版本:hadoop-2.5.0-cdh5.3.6 环境:centos6.4 必须可联网 hadoop 下载网址: http://archive.cloudera.com/cdh5/ ...

  7. (二)一起学 Java Collections Framework 源码之 AbstractCollection

    . . . . . 目录 (一)一起学 Java Collections Framework 源码之 概述(未完成) (二)一起学 Java Collections Framework 源码之 Abs ...

  8. 【转】Python处理wave文件

    #本文PDF版下载 Python解析Wav文件并绘制波形的方法 #本文代码下载 Wav波形绘图代码 #本文实例音频文件night.wav下载 音频文件下载 (石进-夜的钢琴曲) 前言 在现在繁忙的生活 ...

  9. Java中Object类的方法笔记

    今天看了下Object类的源码,以下是我看源码的一些笔记,欢迎有小伙伴来补充~ 首先列举下几个主要方法(面试被问到过的): equals:这个主要是用于比较对象的,Object中比较的是比较原始的,直 ...

  10. SQLAlchemy介绍和基本使用

    pymysql:pymysql是用Python来操作mysql的包,因此通过pip来安装,命令如下:pip3 install pymysql.如果您用的是Python 3,请安装pymysql 豆瓣源 ...