linux设备如何通过USB网络共享与手机通信(包含安卓手机以及iphone)

时间:2022-01-06 16:09:00

公司做的无人机(开发板用的是高通的9342 wifi平台,linux 内核为2.6.31)需要跟手机通讯,要求通信稳定延时低,是通过USB网络共享实现的。

与安卓手机共享USB网络

    直接在板子linux内核开启rndis和usb相关选项即可。

     bug记录

     插拔usb线,因为mac地址变化手机连接上遥控器但连不上飞机的bug,改了9342驱动 extap部分。


与iphone手机共享USB网络

 除了修改内核配置(内核添加netlink socket等),还需要移植苹果的一套开源程序和驱动,包含usbmuxd/pair两个应用程序及依赖的十多个库,底层USB驱动模块ipheth.ko。

  ipheth.ko为虚拟的USB网卡驱动。

  usbmuxd用于对usb配置,配置完后生成正确的usb厂商ID,设备ID等。

  pair是握手程序

 设备端iphone USB共享流程: iphone手机通过USB线连接到设备->usbmuxd运行,生成USB厂商ID、设备ID->内核扫描调用ipheth驱动模块,生成eth0网口->pair运行,握手通信->dhcp客户端运行,设备端可通过DHCP拿到172.20.10.x网段的IP。共享完成,在设备端可ping通iphone手机(172.20.10.1)

 bug记录

1.USB线连接好iphone和9342板子后,需要在iphone的usb网络共享功能,先关闭再打开,才能ping通

          修改pair程序解决

 2.   USB网络共享+wifi,用chariot做性能测试,运行几秒后提示队列超时(dev_wathchdog:queue eth0 time out...)

     驱动bug,临界区未加锁被wifi中断打乱执行顺序,修改ipheth.c解决


调试环境搭建

板子做host,手机做device,但板子的usb没有供电,所以中间加了个usb hub来解决供电的问题