当前位置: 首页 > article >正文

buildroot系统调试苹果手机网络共享功能

苹果手机usb共享网络调试

  • 首先了解usb基础知识,比如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()

  • 内核具体代码修改及调试步骤
  1. 根据上面分析我们是要使能usb_gadget子系统,修改menuconfig打开usb_gadget,如下:

 

需要设置我们插入设备的usb口输入的usb控制器为otg模式如下:

 

  1. 通过代码及资料知道,rk3399sdk是支持以下功能:

 ADB:是一种功能多样的命令行调试工具,可以实现文件传输,Unix Shell登录等功能

 UAC:通过USB虚拟标准PCM接口给Host设备,实现DeviceHost之间音频互传功能

 UVC:做usb video camera供主设备获取图像数据

 RNDIS:提供基于USB的网络接口规范,可以使用网络命令(SSH等)实现DeviceHost的数据交互

MTP:是由Microsoft提出的一套媒体文件传输协议,可以方便的在DeviceHost之间共享媒体文件

UMS:Host设备提供大容量外挂存储

ACM:USB虚拟串口,在Device/Host两端生成TTY设备

  1. 我们这里usb网络共享功能属于rndis功能范畴,需要打开linux默认支持的驱动:

 

  1. 我们内核是kernel4.4带的ipheth.c是不够新的,我们通过反复对比测试,需要跟新驱动,去内核官网下载5.1最新的代码,进行比较同步,部分diff如下:

 

  1. 因为我们的usb口是typec口,所以需要支持typec协议,这里配置fusb302默认为DRP即可:

 

到此内核代码修改完成(Android手机usb网络共享即可支持)。而想要能与苹果手机进行网络共享,还需要专门针对苹果手机的应用程序去匹配。

  • 应用程序代码添加
  1. 通过网络以及github查询,我们若要支持苹果手机usb网络共享需要添加如下库和执行程序:

 

具体package添加修改如下:

 

 

 

进入系统后,默认执行 /usr/sbin/usbmuxd &即可支持我们设备接上苹果手机即可通过usb网络共享功能


http://www.kler.cn/a/17420.html

相关文章:

  • 浪潮信息“源”Embedding模型登顶MTEB榜单第一名
  • Llama架构及代码详解
  • 大厂的 404 页面都长啥样?看看你都见过吗~~~
  • Python中异常处理小测验
  • 如何在算家云搭建Peach-9B-8k-Roleplay(文本生成)
  • win32 / WTL 开发多线程应用,子线程传递大对象给UI线程(主窗口)的方法
  • 人机智能中几个困难问题浅析
  • API接口的对接流程和注意事项
  • STM32F4_十进制和BCD码的转换
  • 【地铁上的设计模式】--结构型模式:装饰器模式
  • IJKPLAYER源码分析-重要字段
  • LeetCode 1003. Check If Word Is Valid After Substitutions【栈,字符串】中等
  • 【GAMES101】03 Transformation
  • 回忆我的爷爷
  • 什么是图数据库Neo4j
  • 力扣---LeetCode141/142. 环形链表 (I)和(II) (代码详解+流程图+数学逻辑拓展)
  • 自动驾驶技术:前景、优势与挑战
  • kubernetes安装
  • Docker 架构
  • Vue生命周期
  • 第二十四回:如何屏蔽事件
  • SpringMVC(后)SSM整合
  • [创新工具和方法论]-01- DOE课程基础知识
  • K8s 安全是云安全的未来
  • AI仿写软件-仿写文章生成器
  • 计算机组成原理4.2.3提高存储器访问速度的措施