This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] Linux/processor-SDK-AM335X:如何动态重新配置 USB 小工具?

Guru**** 2562700 points
Other Parts Discussed in Thread: AM3352

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/627081/linux-processor-sdk-am335x-how-to-dynamically-reconfigure-usb-gadget

器件型号:PROCESSOR-SDK-AM335X
主题中讨论的其他器件:AM3352

工具/软件:Linux

您好!

我帮助的客户是将 AM3352与处理器 SDK 02.00.01.07搭配使用。

此产品正在生产中、并由终端客户使用。

新功能请求导致工厂需要加载特殊值。

目前、USB 子系统配置为具有大容量存储小工具配置的外设。 这种情况一直很好。

为了使工厂能够以更自动化的方式与器件交互、我们尝试将小工具从大容量存储器件动态重新配置为串行 ACM 小工具器件。 我们不希望两者同时配置。 我们只想在出厂时配置 USB 串行端口小工具。

这不奏效。

为了动态重新配置、我尝试定义了两个可能的小工具、例如:

/sys/kernel/config/usb_gadget/massStorageGadget

/sys/kernel/config/usb_gadget/serialGadget

然后、只需使用以下命令禁用大容量存储小工具:

回显"">/sys/kernel/config/usb_gadget/massStorageGadget/UDC

并使用以下命令启用串行端口小工具:

回显"musb-hdrc.0.auto">/sys/kernel/config/usb_gadget/serialGadget/UDC

这似乎可以正常工作、直到我们将 USB 电缆连接到器件、然后我们在 dmesg 中看到以下错误消息:

[839.828577] Mass Storage Function,版本:2009/09/11
[839.834234] LUN:可移动文件:(无介质)
[839.920019] LUN 数量=1
[839.924408] UDC musb-hdrc.0.auto:注册 UDC 驱动程序[massStorageGadget]
[839.924503] configfs-gadget 小工具:添加'Mass Storage function'/cf558d00至 config 'c1'/cf4c9c98
[839.927476] configfs-gadget 小工具:I/O 线程 pid:310
[839.927544] configfs-gadget musb-hdrc.0.auto: USB_gadget_UDC_start
[839.928461] mass _storage.ms0/lun.0:打开后备文件:/dev/mmcblk0p6
[888.788641] configfs-gadget musb-hdrc.0.auto:取消注册 UDC 驱动程序[massStorageGadget]
[888.791621] configfs-gadget musb-hdrc.0.auto: USB_gadget_UDC_stop
[888.791706] configfs-gadget 小工具:解除绑定函数'My Storage Function'/cf558d00
[888.813452] configfs-gadget 小工具:解除绑定
[896.092545] userial_init:注册的4个 ttyGS*设备
[896.286606] UDC musb-hdrc.0.auto:注册 UDC 驱动程序[serialGadget]
[896.286763] configfs-gadget 小工具:将'ACM'/cf242e40添加到 config 'c1'/cc21ea98
[896.286837] configfs-gadget 小工具:ACM ttyGS0:双速输入/ep1in 输出/ep1out 通知/ep2in
[896.286873] configfs-gadget musb-hdrc.0.auto: USB_gadget_UDC_start
[903.351816] musb_h_ep0_IRQ 1164:结束0无 URB
[903.356656] musb_h_ep0_IRQ 1164:结束0无 URB
[904.593829] musb_h_ep0_IRQ 1164:结束0无 URB

< "no="" urb="" for="" end="" 0"="" msg="" multiple="" times="">>

查看驱动程序代码、"no URB for end 0"似乎是一个致命问题或"should not eur"错误。

主机 PC 此时未检测到器件。

有什么想法吗? 我找到启用串行端口的唯一方法是重新引导并仅启用串行小工具。 我还可以在单个复合小工具中同时启用串行和大容量存储、这是可行的、但这并不是理想的、因为现在我们的最终客户需要配置 Windows。 (如预期的那样、可与 Linux 完美配合使用。)。

此外、仅禁用大容量存储小工具并重新启用大容量存储小工具会导致相同的"端0无 URB "问题、主机 PC 再次看不到器件。 我必须重新引导设备才能再次启用小工具。

因此、问题如下:

*如何动态重新配置外设 USB 设置? 这是可行的吗?

*是否有办法在 Linux 中"硬复位" USB 子系统而无需重新启动器件/Linux?

*或者、我们如何将串行端口动态添加到已配置为大容量存储的复合小工具中?

非常感谢、

Matthew