以编程方式连接和断开Android设备

Rya*_*ard 17 usb android disconnect

我需要找到一种方法(使用Android应用程序)以编程方式连接和断开Android设备与主机的连接.

我正在使用Galaxy Nexus.我的目标是尽可能保持一切尽可能接近库存,尽管我已经在内核中启用了详细的调试消息,并且为了查看它们已经启用了手机上的root访问权限/proc/kmsg(以及shell命令dmesg).

我确信有一种方法可以利用root访问来完成我需要做的事情,但是我所有的尝试都导致了nix.

  • 混乱 /proc/bus/usb
  • 混乱 /dev/bus/usb
  • 在MTP/PTP之间切换(无法以编程方式进行)
  • 将Android USB小工具驱动程序转换为模块< - ???

我将尝试弄清楚如何在列表中执行最后一个对象,因为我将能够rmmod和我的应用程序中insmod的结果*.ko,并将连接和断开手机.我不确定这个选项的可行性.

Rya*_*ard 1

解决方案是在接近截止日期时提出的,所以我几乎可以肯定这不是最好的做事方式,但它满足了我的要求。

构建 Modded 内核(以允许挂钩特定功能)

  • 修改内核配置以支持 Kprobes(将 CONFIG_KPROBES 设置为 Y)
  • 从android_setup()定义中删除“static”关键字(driver/usb/gadget/android.c)
  • 构建该内核

构建内核模块(提供连接和断开连接的实际功能

  • 使用Kallsyms动态拉取android_setup()的绝对地址
  • 使用 kprobes,挂钩 android_setup()
  • 设置两个定时器,每次调用 android_setup() 时执行
  • 第一个计时器设置为从现在起 2 秒,第二个计时器设置为从现在起 2.005 秒
  • 两个定时器都采用指向 struct usb_gadget 的指针作为数据
  • 在各自的回调函数中,调用 usb_gadget_connect() 和 usb_gadget_disconnect(),这会强制物理断开连接,然后在 Samsung Galaxy Nexus 上重新连接

构建应用程序

  • 必须有一个已root的设备
  • 只需使用 SU 权限进行 shell 调用 - “insmod module_name”。在您调用 rmmod 之前,模块将强制设备进入枚举循环,不断断开连接并重新连接。

如果您有兴趣重复这些结果,请阅读此处发布的文档,并随时向我发送任何问题。

https://docs.google.com/uc?export=download&id=0B9WchRkSOWwJbi10MGhLWUljT2s