通过网络实现USB共享

时间:2014-11-22 20:05:40

标签: android sockets usb adb

我开始考虑是否可以配置我的开发环境,以便我可以从连接到我的笔记本电脑的USB端口的Android设备上的办公网络中的开发框运行adb命令。在同一局域网中(或通过VPN连接)。我特别希望adb服务器在开发盒上运行,并通过网络与我设备上的adb守护进程通信。我不想将开发框上运行的adb客户端连接到我的笔记本电脑上运行的adb服务器,adb工具允许通过其-H选项,我不想使用{{1} }或adb connect命令。基本上,我只想通过USB电缆中继通过网络进行的adb通信(SSH隧道)。

作为概念验证,我设法使用third party solution构建原型,允许我通过网络共享USB,但现在我想看看我是否可以使用端口转发和一些编码来构建相同的解决方案。但是,我对USB驱动程序,操作系统内核以及USB通信如何工作(在Linux和Mac上)的技术知识非常基础,所以我希望能从社区中找到一些答案。

问题:我需要在USB堆栈的哪个位置开始创建挂钩,以便将某个USB端口的所有数据通信转发到在同一操作系统中运行的其他进程?

提案:如果我能找到每台机器上的USB驱动程序与内核中的进程通信然后将数据转发到应用程序的端口号,我可以在每台机器上使用端口转发将通信重新路由到在每台计算机上运行的守护进程,然后将数据包装在TCP / IP中并通过网络传输。下图描绘了这种情况:

enter image description here

需要将客户端计算机上运行的adb服务器配置为将其通信路由到damon仿真器进程侦听的客户端计算机上的端口。然后,该守护进程必须通过网络将数据传输到在通过USB端口托管Android设备的服务器机器上运行的另一个守护进程。后一个守护程序进程侦听客户端机器发送TCP / IP数据的同一端口然后将读取数据,将其转换为adb协议,并将数据发送到USB设备。我想要了解更多关于此解决方案的部分内容是如何编写充当USB设备模拟器的守护进程。任何有关进一步阅读的帮助或建议都表示赞赏。

1 个答案:

答案 0 :(得分:0)

我找到了一个很容易解决这个问题的方法。我能够通过运行以下命令来实现这一目标。

在我的远程开发机器上:($remote_host

adb kill-server

在我的笔记本电脑上:

adb kill-server
adb start-server
ssh -N -R 5307:localhost:5307 $remote_host

最后,我的远程开发:

adb start-server

然后我可以在我的远程计算机上运行adb devices(使用SSH隧道)并查看连接到我的笔记本电脑的设备的SN。