在Nexus One Android USB附件模式下进行调试

3
当我们在使用 Nexus one 的 Usb Accessory 模式时,需要关闭手机中的 adb 模式。否则,Usb Accessory 无法访问。
有人知道如果关闭了 adb 模式,如何调试 apk 吗?我尝试了远程调试,但失败了。
Google SDK 表示:0x2D00 保留给支持配件模式的 Android 设备。0x2D01 保留给既支持配件模式又支持 ADB(Android Debug Bridge)协议的设备,该协议公开了两个批量端点的第二个接口,用于 ADB 调试配件应用程序,如果您正在计算机上模拟配件,则可以使用这些端点。一般情况下,请勿使用此接口,除非您的配件实现了设备上的 ADB 通行证。
但是,如何激活PID为2D01的Nexus one呢?我的 Nexus one 只能使用2D00。
参考链接: http://developer.android.com/guide/topics/usb/adk.html#determine
3个回答

3
我也在尝试调试连接到Nexus S手机的Android Accessory Mode(ADK)设备。虽然我还没有能够调试我的硬件,但我发现使用Linux系统作为Accessory Mode设备非常有用。这允许使用usbmonWireshark观察底层协议。
如果有人知道如何在不购买USB协议分析仪(www.openvizsla.org)的情况下调试Android到Accessory的通信,请帮忙。
Nexus-Computing GmbH的(android.serverbox.ch/?p=262) simplectrl.c(Linux端)和UsbTest(Android端)非常有价值,并成为以下内容的基础:
在Ubuntu 11.04下捕获USB流量的操作步骤:
1) 启用usbmon: mount -t debugfs none_debugs /sys/kernel/debug sudo modprobe usbmon 2) 安装Wireshark和辅助程序:

sudo apt-get -y install flex bison wireshark libusb-dev libusb-1.0-0-dev

apt-get source libusb

3) 下载并安装libpcap,(www.tcpdump.org/release/libpcap-1.1.1.tar.gz)

tar xvf libpcap-1.1.1.tar.gz

cd libpcap-1.1.1

./configure

make

sudo make install

4) 将您的Android设备连接到Linux系统,并确保已连接:

?/android-sdk/platform-tools/adb devices

5) 使用eclipse (developer.android.com/sdk/installing.html) 或您喜欢的方法将USBTest应用程序编译并上传到您的Android设备。 您需要安装Google APIs 2.3.3。 我已经更新了simplectrl和UsbTest,修复了一些错误,以确保它们可以开箱即用。 它们作为附件在LUFA库支持列表 (groups.google.com/group/lufa-support/msg/2e6d76c92d9e828a)上提供。

6) 确定要捕获的正确USB总线。 lsusb 将输出类似以下内容:

Bus 001 Device 057: ID 18d1:4e22 Google Inc.

以上意味着您的Android设备在总线001上。

7) 以root权限启动Wireshark并选择适当的捕获接口:

gksudo wireshark

8) 将Linux系统连接到您的Android设备并运行simplectrl

rm ./simplectrl; gcc simplectrl.c -I/usr/include/ -o simplectrl -lusb-1.0 -I/usr/include/ -I/usr/include/libusb-1.0

9) 可以在LUFA库支持列表(groups.google.com/group/lufa-support/msg/8c740dfa58a1d1fd)的附件中找到simplectrl与USBTest通信的Wireshark捕获会话示例。


如果您想要流式传输usbmon捕获的数据,可以按照以下步骤进行:
1)列出usbmon接口:sudo ls -laR /sys/kernel/debug/usb/usbmon/ 2)使用lsusb列出连接的设备。 输出将类似于: Bus 001 Device 057: ID 18d1:4e22 Google Inc. 3)上述意味着您的Android设备在总线001上,因此应从总线1捕获数据: sudo sudo cat /sys/kernel/debug/usb/usbmon/1u *注意:总线0捕获所有总线。 u定义数据的输出格式。有关更多信息,请阅读(www.kernel.org/doc/Documentation/usb/usbmon.txt)。

嗨,Opendous,你能告诉我你的Nexus S VID吗?我只是想知道它是否不同。我没有运气得到VID 2D01。 - Tim Chiang
我在手机上安装了aLogCat,虽然只能获取一些日志,但总比没有好。 - Tim Chiang
我使用安装了2.3.4版本的Nexus S,并在simplectrl.c中设置了VID=0x18D1和ACCESSORY_PID=0x2D01。我目前正在努力编译一个更新的Android内核,其中包含usbmon。准备好后,我会发布一份教程。由于忘记在偏好设置下启用stackoverflow电子邮件通知,所以错过了您的评论。 - Opendous

1

通过wifi调试USB附件似乎只有在Nexus设备上才可能(我使用过Nexus 7和Nexus 7 2013)。我尝试了许多其他品牌的设备(如三星、摩托罗拉),当在设置中启用USB调试时,它们无法检测到附件。我还尝试了硬件USB开关-但没有帮助。


0

抱歉,这是一个不同的问题。设备在adb模式下工作正常。我的问题是如何在USB ACCESSORY MODE下进行调试。这种模式使用PC上的不同驱动程序。似乎需要关闭设备上的ADB(我不确定)。 - Tim Chiang

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接