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/AM5728:USB 音频类(UAC1)驱动程序在具有 Linux-4.9.28内核的 AM572x 上无法正常工作

Guru**** 2553260 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/621337/linux-am5728-usb-audio-class-uac1-driver-not-working-on-am572x-with-linux-4-9-28-kernel

器件型号:AM5728

工具/软件:Linux

您好!

我已从以下链接下载并构建了最新的 TI Linux 内核(4.9.28)、

使用 uac1编译 USB 音频小工具驱动程序(在  配置文件中启用 CONFIG_GADGET_UAC1) 、并将模块复制到目标板、

 在目标板上、按如下方式插入了 USB 音频小工具驱动程序、

modprobe libcomposite

modprobe g_audio 

g_audio 一起插入了相关的 USB_f_uac1模块。

但是在枚举上, USB 分析器(Ellisys)和 SET_INTERF(1,1)上出现“STALLED DEPTHALL ERROR”(挂起错误)时 PC (Linux)上出现-32(EPIPE)错误。

USB 2-1.1:1:1:USB_SET_interface 失败(-32) 


注意:UAC1、UAC2在具有 Linux 4.4内核的 AM572x 电路板上工作正常。

UAC2 在具有 Linux 4.9内核的 AM572x 电路板上工作正常。

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

    您是否在 AM572x 侧的 dmesg 中看到任何错误? 如果是这样、您可以共享 dmesg 会很有帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好 Dwarakesh、

    我在 AM572x 侧没有收到任何错误、也没有从 PC 接收到"Set alt"、

    仅在 PC 端获取错误。 已从 AM572x 中附加完整的 dmesg 日志。

    插入 g_audio 模块时会显示以下 dmesg 日志、

    [229.879192] g_audio 小工具:硬件参数:access 3、format 2、channels 2、rate 48000
    
    [229.887360] g_audio 小工具:Linux USB 音频小工具、版本:2012年2月2日
    
    [229.895616] g_audio 小工具:g_audio ready
    
    [ 230.284353] g_audio 小工具:linux #config:high-speed usb 


    e2e.ti.com/.../4861.dmesg_5F00_29Aug2017.txt

    让我在驱动程序中添加更多调试打印件、并尽快与您分享日志。 
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。


    您好 Dwarkesh、

    请查找随附的日志 dmesg、AM572x 的 USB 分析器日志以及 UAC1的 Linux PC。

    e2e.ti.com/.../2055.am572x_5F00_dmesg_5F00_04sep2017_5F00_uac1.txte2e.ti.com/.../0763.Linux_5F00_PC_5F00_dmesg_5F00_04Sep2017_5F00_uac1.txt

    设置接口在 PC 中处于停滞状态、在小工具(AM572x)端未接收到。

    此致、

    Mukesh Kumar

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

    您好、Mukesh、

    共享的日志中有一个与 STALL 相关的内核转储。 调试问题、您可以尝试

    1.在 dwc3_ep0_interrupt ()-> dwc3_ep0_xfer_complete ()或 dwc3_ep0_xferno迎宾()-> dwc3_ep0_stad_and_restart ()中添加日志。 基本上算出这个函数 dwc3_ep0_stad_and_restart () 被调用的方式/位置来获得一个线索。

    2.或者快速地按照链接:"部分中的建议启用">www.kernel.org/.../dwc3.rst 中"报告错误"部分中的建议启用 dwc3的跟踪日志并检查流程。  

    这可以让我们知道发生了什么。 理想情况下,我们应该根据  我的理解,在成功的情况下调用 drivers/USB/gadget/scompose.c 中的 compose_setup()函数。  

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

    Mukesh、

    是否有任何理由要使用 UAC1而不是 UAC2?

    我从未测试过 UAC1。 您能否提供测试说明、以便我可以查看我身边的问题?

    没关系。 我再次读取您的帖子、失败在枚举期间发生。 我要看一下。

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

    您好 Dwarkesh、

    根据这个链接、我已经为 dwc3和捕获的日志文件"trace.txt"启用了跟踪日志、但是我不能捕获 regdump。 此外、我开始分析日志、并且能够看到 dwc3_gadget_ep_set_halt 函数(设置失速) 正在被调用 、我们需要为其找到根本原因、因此请通过在 您建议的函数中添加更多日志来开始调试。

    PFA 跟踪日志的附件。

    e2e.ti.com/.../8765.trace_5F00_win.txt e2e.ti.com/.../0753.trace_5F00_linux.txt

    此致、

    Mukesh Kumar。

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

    您好、Bin Liu、

    [Q]是否有任何理由要使用 UAC1而不是 UAC2?
    是的,作为项目要求的一部分,我们需要使用 UAC1。

    按照以下步骤测试 UAC1、
    1) 1)在 Linux 内核配置中启用 CONFIG_GADGET_UAC1 (默认情况下禁用)
    2) 2)已插入默认小工具驱动程序

    modprobe libcomposite
    
    modprobe g_audio 

    (相关模块 USB_f_uac1)已插入。

    3)已将 USB 电缆连接到主机(Linux、Windows)

    此致、

    Mukesh Kumar

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

    Mukesh、

    我能够重现此问题并缩小到内核 git commit 2b95c939cb88c3 ("USB:小工具:复合:测试 get_alt()存在而不是 set_alt()")的回归。 请将下面随附的补丁应用到您的4.9.28内核、并告诉我它是否能解决您的问题。

    e2e.ti.com/.../5165.0001_2D00_Revert_2D00_usb_2D00_gadget_2D00_composite_2D00_Test_2D00_get_5F00_alt_2D00_presence_2D00_in.patch_5B00_1_5D00_.txt

    
    恢复"USB:小工具:复合:测试 get_alt()存在而不是 set_alt()"
    
    这将恢复提交2b95c939cb88c3182e9dd681d4cf40b70985b8a5。
    
    由于这个提交、dwc3上的 UAC1小工具在枚举中失败、 
    因为 UAC1不实现 get_alt()。 diff --git a/drivers/usb/gadget/scompose.c b/drivers/usb/gadget/scompose.c index c3c5b87b35b3..84ff8d6d4024 100644 -- a/drivers/usb/gadget/scompose.c ++ b/drivers/usb/prop get/scompose.c @@@@-164,9ut 配置*4、9uf * 值= min (w_length、(U16) 1); 休息; - /*函数驱动程序必须处理获取/设置替代设置*/ + /*函数驱动程序必须处理获取/设置替代设置;如果 有+ *没有 get()方法,我们知道只有 altSetting zero 有效。 + * 案例 USB_REQ_SET_INTERFACE: if (Ctrl->bRequestType!= USB_Recip_interface) 转至未知; @@-1703、13 +1705、7 @@静态 int fill_ext_prop (struct usb_configuration *、c、int interface、u8 * buf) f = cdev->config->interface[intf]; 如果(!f) 休息; - /* - *如果没有 get_alt()方法,我们只知道 altSetting zero - *正常工作。 无需检查 SET_alt()是否为 NULL - *当我们在 USB_add_function ()中进行检查时。 - */ - if (w_value &&!f->get_alt) + if (w_value &&!f->set_alt) 中断; value = f->set_alt (f、w_index、w_value); if (value == USB_gadget_Delayed_status){
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Bin Liu、

    谢谢、补丁程序运行正常。 现在枚举是正确的、数据也会在主机 PC 和小工具之间传输。

     感谢您的支持。

    我仍然对此有一些疑问、

      • Windows PC 中仅检测到扬声器(播放)设备。 录制设备(麦克风)如何?
      •  当我通过主机 PC 中的小工具设备播放某些歌曲/音频时、我可以看到数据(192字节)正在通过 USB 分析器(监听器)从主机 PC 传输到小工具  、但如何确保在小工具模块中正确接收数据。 是否有方法测试功能?
      •  每当我在 主机 PC 中播放某些音频时、AM572x 中都会出现错误"g_audio gadget:播放错误:-32"。 (随附日志).e2e.ti.com/.../6740.gadget_5F00_playback_5F00_error.txt

    此致、

    Mukesh Kumar