问题标签 [gadgetfs]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
86 浏览

linux - 为什么当我回复字符串请求时,gadgetfs 有时会因 EBUSY 而失败?

我有一个 Variscite DART-MX8M 评估板,我正在尝试将其用作 USB 小工具,因此我编写了一个与 gadgetfs 对话的用户模式小工具驱动程序(安装在 gadgetfs 上/dev/gadget)。它总是向主机返回设备描述符,但有时在响应对字符串描述符的请求时会失败。症状是当我将字符串写回端点 0 时,我得到EBUSY; 重试无济于事,因为随后的尝试得到ESRCH.

它不会在第一次请求字符串描述符时发生,正如您在下面看到主机获取制造商和供应商的位置(我认为是通过 udev 规则)但lsusb无法检索它们。但是当它确实失败时,它总是在执行的同一点。

我已经在内核中进行了一些打印跟踪(5.4.85,Variscite 的“Dunfell”版本),并找到EBUSY来源

但我不明白为什么我们会碰到这个。

我制作了最简单的驱动程序来重现它 - 它只有一个配置,没有端点(不包括 ep0):

在不更改代码的情况下,我出人意料地得到了两个不同的结果,正如从使用lsusb -v -d aa00:00bb. 当它起作用时,我得到:

当它失败时:

dwc3在我卸载驱动程序并重新加载它之前,它不会再次工作。

这是失败案例的相关内核日志消息(我启用CONFIG_USB_GADGET_VERBOSE了这些消息):

(来自的行dwc是我添加到上ret = -EBUSY图所示的行)。

Wireshark 跟踪可能将手指指向SET_CONFIGURATION,因为它一直有效到该点:

什么可能导致此故障,我需要做些什么来避免它?

0 投票
0 回答
83 浏览

usb - RaspberryPi Gadgetfs 自定义设备

我正在使用 RaspberryPi 4 作为自定义 USB 设备。我现在有问题,它可以在一台 PC 上运行,但不能在另一台 PC 上运行。都是Win10。

我使用了以下指南: https ://blog.soutade.fr/post/2016/07/create-your-own-usb-gadget-with-gadgetfs.html

我通过 USB 浏览器查看了 USB 数据,现在我有两个问题:

  1. 我发现 Pi 正在发送数以百万计的 IN 批量传输,全部以 NAK 回复(大约 300k 在 200 毫秒内)这些在启动后甚至在我的软件运行之前就直接启动了。这可能是一个问题吗?这是什么原因以及如何阻止它?

  2. 有没有办法限制覆盆子只使用全速?(我的谷歌技能让我明白了这一点:https ://patchwork.kernel.org/project/linux-usb/patch/c4a428ec617a954dc27221d8a9133d22c38b2447.1578537372.git.thinhn@synopsys.com/ 但我不知道这对我有什么帮助。 ..)

我希望有人有一个想法:) 如果需要更多信息,请告诉我。

干杯!

0 投票
0 回答
43 浏览

c - RaspberryPi gadgetfs 控制传输数据阶段

我按照这个指南在 RasperryPi 4 上设置了一个自定义 USB 小工具: https ://blog.soutade.fr/post/2016/07/create-your-own-usb-gadget-with-gadgetfs.html

现在我有以下问题:

我在 DataStage 中收到一个带有附加数据的类请求 OUT。所以调用函数:

因为它是带有附加数据的 OUT 请求(wLength > 0),所以我调用

读取确实读取了 255 个字节(ret == 255),但内容request_buffer不是主机发送的数据。它实际上包含上次发送到主机的数据。

然后我添加了

在前面read。这总是会遇到超时(返回 0)。但timeout = 400有时我在request_buffer.

有人现在我做错了吗?我想念什么?

有关其他信息,我在此处提供了显示请求的 USB 分析器的屏幕截图。 USB-Sniffer 截图

这里是相关代码:

0 投票
0 回答
14 浏览

usb-descriptor - 谁有关于gadgetfs的文档或博客?

我在http://www.linux-usb.org/gadget/usb.c中找到了一个示例,但对我来说它较少。我想给gadgetfs写一个描述符,但是总是错的。我意识到我对描述符或gadgetfs的错误想法。我需要更多文档或示例!真的真的谢谢!!

生成描述符的代码。参数“dev”来自 USB 设备。