苹果手机usb共享网络调试
1.HOST模式下是只能做主设备,
2.OTG模式下是可以即做主又可以做从,主设备即HCD,从设备即UDC(USB_GADGET )。而我们这里调试的usb网络共享属于做从设备,
3.OTG控制器集成在CPU内,当有OTG线插入OTG设备时产生中断,中断处理函数上半部通过读取OTG控制器寄存器相应值判断OTG设备属于Host(HCD)还是Gadget(UDC),下半部通过工作队列由回调函数类似host->resume()或gadget->resume()重启Host或Gadget控制器,resume()具体的实现过程在HCD或UDC相关驱动里实现
4.USB_GADGET介绍:
Gadget源码位于./drivers/usb/gadget/下,涉及的驱动程序和数据结构相对较多。
USB Gadget 是运行在USB Peripheral 上配置USB功能的子系统,正常可被枚举的USB设备至少有3层逻辑
层,有些功能还会在用户空间多跑一层逻辑代码。Gadget API就是具体功能和硬件底层交互的中间层。
从下到上,逻辑层分布为:
USB Controller: USB上最底层的软件代码,直接与硬件交互,并抽象出endpoint概念,用于管理数
据流的进出,并供给USB Gadget层调用。
USB Gadget: 进一步封装USB Controller,调用USB Controller实现硬件无关的软件配置。例如,在
ep0协议上运行各种class-specific协议来启动特定功能,并管理端点的进出信息等。
Upper Level: 大部分的Gadget驱动都会连接到具体的Linux驱动或框架,通过连接这些具体功能的驱
动或框架让USB正常工作。
Additional Layers: 除开以上3层代码,还有可能有其他多出的代码层,比如kernel里的网络协议栈,
也有可能是一个用户上层应用,通过调用POSIX系统的标准接口实现,如 open() , close() ,
read() and write() 。
需要设置我们插入设备的usb口输入的usb控制器为otg模式如下:
ADB:是一种功能多样的命令行调试工具,可以实现文件传输,Unix Shell登录等功能
UAC:通过USB虚拟标准PCM接口给Host设备,实现Device和Host之间音频互传功能
UVC:做usb video camera供主设备获取图像数据
RNDIS:提供基于USB的网络接口规范,可以使用网络命令(SSH等)实现Device和Host的数据交互
MTP:是由Microsoft提出的一套媒体文件传输协议,可以方便的在Device和Host之间共享媒体文件
UMS:给Host设备提供大容量外挂存储
ACM:为USB虚拟串口,在Device/Host两端生成TTY设备
到此内核代码修改完成(Android手机usb网络共享即可支持)。而想要能与苹果手机进行网络共享,还需要专门针对苹果手机的应用程序去匹配。
具体package添加修改如下:
进入系统后,默认执行 /usr/sbin/usbmuxd &即可支持我们设备接上苹果手机即可通过usb网络共享功能