一般情况下如果iPhone连接到Android机器上,在Android平台硬件支持MFI芯片 + 软件支持Carplay协议才能正常通信。通信走NCM驱动cdc_ncm -> usbnet device -> net_device。

当Android端不支持MFI时,我们只能通过其他方式,恰巧苹果有一个服务,叫usbmuxd,这个服务主要用于在USB协议上实现多路TCP连接,将USB通信抽象为TCP通信。苹果的iTunes, XCode,都直接或者间接地用到了这个服务。

由于usbmuxd只有Linux版本,大费周折2天时间终于将usbmuxd通过交叉编译移植到Android上(后续章节会详细讲下移植过程的坑)。现将iPhone通过数据线接到Android机器上,Android 终端在usb bus上枚举出设备如下:

T: Bus=01 Lev=02 Prnt=02 Port=02 Cnt=01 Dev#= 9 Spd=480 MxCh= 0

D: Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs= 4

P: Vendor=05ac ProdID=12a8 Rev=10.01

S: Manufacturer=Apple Inc.

S: Product=iPhone

S: SerialNumber=913710ffc532d7428b9e1ed0f53bac10aaa4ea57

C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=500mA

I:* If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=(none)

E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=64ms

C: #Ifs= 3 Cfg#= 2 Atr=c0 MxPwr=500mA

I: If#= 0 Alt= 0 #EPs= 0 Cls=01(audio) Sub=01 Prot=00 Driver=

I: If#= 1 Alt= 0 #EPs= 0 Cls=01(audio) Sub=02 Prot=00 Driver=

I: If#= 1 Alt= 1 #EPs= 1 Cls=01(audio) Sub=02 Prot=00 Driver=

E: Ad=81(I) Atr=01(Isoc) MxPS= 192 Ivl=1ms

I: If#= 2 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=

E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=125us

C: #Ifs= 2 Cfg#= 3 Atr=c0 MxPwr=500mA

I: If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=

E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=64ms

I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=fe Prot=02 Driver=

E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

C: #Ifs= 3 Cfg#= 4 Atr=c0 MxPwr=500mA

I: If#= 0 Alt= 0 #EPs= 3 Cls=06(still) Sub=01 Prot=01 Driver=

E: Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=83(I) Atr=03(Int.) MxPS= 64 Ivl=64ms

I: If#= 1 Alt= 0 #EPs= 2 Cls=ff(vend.) Sub=fe Prot=02 Driver=

E: Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

I: If#= 2 Alt= 0 #EPs= 0 Cls=ff(vend.) Sub=fd Prot=01 Driver=

I: If#= 2 Alt= 1 #EPs= 2 Cls=ff(vend.) Sub=fd Prot=01 Driver=

E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

I: If#= 2 Alt= 2 #EPs= 2 Cls=ff(vend.) Sub=fd Prot=01 Driver=

E: Ad=86(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms

E: Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms

可以看出iPhone没有虚拟出以太网卡eth*,设置iPhone -> 个人热点->勾选允许其他加入-> 提示点击“仅USB”,Android设备端仍然没有看到iPhone网卡,此时usbmuxd的神奇之处可以体现了,在Android设备终端输入 usbmuxd & 回车。iPhone会弹框“要信任此电脑吗?” 点击信任即可。

通过上述步骤后,iPhone切成了以太网模式:

此时,可以正常上网,如下图:

Android设备如何支持iPhone usb网络共享相关推荐

  1. Android系统中如何添加USB网络共享

    Android系统中如何添加USB网络共享 类别 需求 索引类别 USB网络共享 问题描述 平台是RT1296,在Android系统中已经有支持USB网络共享,但相应的产品系统中还未开启USB网络共享 ...

  2. Android12系统上支持Android手机的usb网络共享

    Android系统需要支持Android手机通过usb共享过来的网络需要修改以下代码 1.修改内核,添加这几项内核驱动,kernel驱动默认有源码,我们只需配置上就行 +CONFIG_USB_USBN ...

  3. Android usb网络共享开关

    Android7.0 usb网络共享开关 涉及的文件: packages\apps\Settings\src\com\android\settings\TetherSettings.java pack ...

  4. android usb共享代码,让Android手机具有USB网络共享功能,可以通过USB连接到Internet...

    第0章: 什么是USB网络共享功能 最近漫游Windows Phone的世界时,最新鲜的感觉之一就是诺基亚Lumia手机具有有趣的USB绑定功能,该功能使您的手机可以通过USB电缆连接到计算机,您可以 ...

  5. Android手机通过USB网络共享限速

    在 Android上都有USB网络共享的功能,可以直接在手机上通过USB口使用电脑端的网络,有些手机叫"USB绑定",有些手机叫"网络共享". 简单说明一下US ...

  6. 如何使用ADB或者shell打开Android的usb网络共享

    现在手机不把usb插在电脑上(usb网络共享)这个开关是灰色的不能打开 插上之后可以使用adb命令: #可能的值'mtp', 'ptp', 'rndis', 'midi', 'none' adb sh ...

  7. android 8 usb 未连接网络,让安卓手机拥有USB网络共享功能通过USB连上网络

    第零章:什么是USB网络共享功能 最近在Windows Phone的世界里漫游了一圈,其中一个很新鲜的感受就是诺基亚Lumia手机有一个很有意思的USB网络共享功能,该功能能让你的手机只要通过USB数 ...

  8. 适用于Mac的USB网络共享驱动程序(手机mac双向usb共享网络)

    该驱动程序实现了Microsoft 专有的RNDIS协议,这是Android设备本身支持的唯一协议; 虽然Linux和Windows用户多年来都喜欢原生RNDIS驱动程序,但Mac OS X仅支持开箱 ...

  9. 安卓获取手机网络强度_USB调试和USB网络共享,安卓有线投屏究竟选哪个?

    用过EZCast投屏设备的安卓手机E粉,可能有过这样的困惑. 「开启USB调试」和「开启USB网络共享」 究竟选哪个进行有线同屏? 今天的小E课堂中,我将带大家看看这两者的区别,以及应该用哪个比较好. ...

最新文章

  1. 九度OJ 区间问题 10000个随机正负数生成
  2. 数据库连接python_python连接数据库
  3. win10中内置的Linux Bash启动闪退问题
  4. 如何在win7(xp)home version下安装 rose 32 bit
  5. 电商设计师套用PSD分层模板,玩转详情页的!
  6. Python打造文件MD5值计算器
  7. 利用函数重载编写函数max_c++笔记(函数重载)
  8. opencv进行5种图像变化:
  9. JS原型继承工作原理
  10. 证明n次根号下n阶乘等价于n/e
  11. sharepoint2010基于表单认证
  12. C语言中错误c213是什么意思,DS1302的错误:error c213
  13. Windows8.1-KB2999226-x64安装提示此更新不适用你的计算机
  14. 无线打印 airprint 服务器,怎么设置普通打印机也能airprint无线打印
  15. 爱了爱了!阿米洛熊猫VA108机械键盘cherry樱桃粉轴白灯,写代码神器!免费包邮送到家!...
  16. 使用阿里云centos7.6进行steam挂卡(使用ASF,更新日期为2021.2.12)解决ASF服务器中文运行的问题
  17. mac ios 远程桌面连接到服务器配置,手把手教你苹果mac如何远程桌面连接
  18. SVD分解和矩阵的Lipschitz条件等
  19. 知名互联网公司都在使用哪些数据库
  20. 【毕业设计】30-基于单片机矿井瓦斯_气体浓度_烟雾浓度报警设计(原理图+源代码+仿真+答辩论文+答辩PPT)

热门文章

  1. ZuulFilter和Fegin超时设置
  2. 安卓手机如何投屏到电视上_关于安卓手机投屏电视问题的一个迂回解决方案
  3. 线程池原理——生产者/消费者
  4. Ubuntu快速更换国内源
  5. 婚姻:谁不想要个“稳定”的男朋友
  6. Java 基础常见知识点面试题总结(上),2022 最新版!
  7. 美通社日历 | 媒体关注、会展信息、企业财报发布,节假日备忘(10月12日—10月18日)...
  8. ‘get‘ 不是内部或外部命令,也不是可运行的程序或批处理文件的问题:没有下载或配置get
  9. Android获取手机系统软件图标,名称等
  10. debian 重启mysql_如何重启MySQL服务,正确重启mysql的方法