我也在尝试调试连接到Nexus S手机的Android Accessory Mode(ADK)设备。虽然我还没有能够调试我的硬件,但我发现使用Linux系统作为Accessory Mode设备非常有用。这允许使用
usbmon和
Wireshark观察底层协议。
如果有人知道如何在不购买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)。