Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
linux usb小工具流量监控_Linux_Debugging_Usb_Accessory - Fatal编程技术网

linux usb小工具流量监控

linux usb小工具流量监控,linux,debugging,usb,accessory,Linux,Debugging,Usb,Accessory,我正在使用BeagleBone黑板(内核4.14.108-ti-r104)使用configfs/functionfs创建USB小工具。我编写小工具(使用gadgettool),提供有关设备配置的详细信息(功能、供应商id、产品id和大量其他参数),运行将描述符和字符串写入ep0的用户空间程序,并将设备连接到主机。一切正常,我得到绑定(当设备绑定到UDC时)和启用(当主机实际连接时)事件,我的设备可以从ep2读取和写入ep1。使用wireshark,我看到通信效果良好,设备和配置描述符以及字符串都

我正在使用BeagleBone黑板(内核4.14.108-ti-r104)使用configfs/functionfs创建USB小工具。我编写小工具(使用gadgettool),提供有关设备配置的详细信息(功能、供应商id、产品id和大量其他参数),运行将描述符和字符串写入
ep0
的用户空间程序,并将设备连接到主机。一切正常,我得到绑定(当设备绑定到UDC时)和启用(当主机实际连接时)事件,我的设备可以从
ep2
读取和写入
ep1
。使用wireshark,我看到通信效果良好,设备和配置描述符以及字符串都进行了交换

当我将设备连接到另一台主机时,问题开始出现。不幸的是,我几乎无法控制该主机,尤其是我无法在那里运行wireshark,我甚至不知道操作系统。我唯一能做的就是插入/拔出设备,可以选择查看检测到设备的消息,也可以选择重新启动。我在gadget端看到的是,在绑定和启用事件之后,我立即获得SUSPEND event,并在
ep2
上读取,但失败108(ESHUTDOWN)。现在的问题是如何追踪这个问题

我试过usbmon,但当设备处于小工具模式时,它似乎不监听流量。我还看到了
https://github.com/torvalds/linux/blob/master/drivers/usb/gadget/udc/trace.h
文件,它似乎定义了一些udc跟踪点,但我不确定如何使用它们

所以最后一个问题很简单:我如何获得关于USB总线上的流量的任何信息,这些信息只能访问小工具端?我不需要完整的跟踪,但至少一些交换包的信息会非常有用。它在交换设备描述符、配置/接口/端点描述符或字符串或其他完全不同的东西时失败了吗

小更新: 整个事情都是关于安卓开放附件协议的,我正试图编写一个小工具来连接这个附件


我已经改变了我的小工具的组成,现在我知道这个小工具是由主机识别的(它显示制造商/型号),所以我想问题不在设备描述符和字符串中。我在描述符中使用了两个附加标志(
FUNCTIONFS\u ALL\u CTRL\u RECIP
FUNCTIONFS\u CONFIG0\u SETUP
),当连接到我的计算机时,我会得到SETUP事件(如预期的那样请求51),但当连接到我的附件时,我仍然会得到SUSPEND/ESHUTDOWN。这一次虽然看起来启用和挂起之间的时间要长得多(超过10秒),但在我看来,好像主机发送了一些消息,但我的小工具没有处理该消息,然后主机超时并禁用了usb设备。仍然不知道如何找出配件是否发送了任何东西到gadget,以及它是什么…

据我所知,没有简单的方法可以做到这一点。你必须使用。您可以选择在哪里使用
usbmon
。您可以使用断接盒点击信号进行调试,但我没有这方面的经验。另请参见内核新手邮件列表。USB 2.0的分线盒非常昂贵:-(至于usbmon,我真的没有任何选择:在我的小工具上,usbmon不工作,我也无法访问usb主机。据我所知,没有简单的方法可以做到这一点。你必须使用。使用
usbmon
的地方是你的选择。你可以使用一个断开框来点击信号进行调试,但我对此没有经验。还有请参阅内核新手邮件列表。USB 2.0的分线盒非常昂贵:-(至于usbmon,我真的没有任何选择:在我的小工具上,usbmon无法工作,我无法访问USB主机。