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.

[参考译文] PROCESSOR-SDK-AM62X:PROCESSOR-SDK-AM62X_DTS

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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/1381934/processor-sdk-am62x-processor-sdk-am62x_dts

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

工具与软件:

主题:[目标板]上的 USB 外设模式问题- UDC 驱动程序绑定失败

您好!

我在目标板[您的目标板型号]上遇到了 USB 外设模式问题。 无法识别 USB 设备、我收到以下内核错误:

[68.736750] UDC 驱动器绑定 ret:-19.
[68.740569] UDC 31000000.usb:无法启动 g:-19.

以下是我当前设置的详细信息:

  • 设备树配置:

usbss0 (&U)
状态="正常";
};

&usb0{
dr_mode ="外设";
pinctrl-names ="默认值";
pinctrl-0 =<&MAIN_USb0_PINS_DEFAULT>;
};

MAIN_usb0_PINS_DEFAULT:MAIN_usb0_PINS_DEFAULT{
PINCTL-SINGLE、PINS =<
AM62AX_IOPAD (0x0254、PIN_INPUT、0)/*(C20) USB0_DRVVBUS */
>;
};

我已验证以下内容:

  1. 设备树配置似乎正确。
  2. 内核配置包括 USB 小工具支持所需的选项。
  3. UDC 驱动器模块(dwc3dwc3-gadget)已加载。
  4. 硬件连接正确。

尽管进行了这些检查、但 USB 外设模式无法正常工作、尽管它在主机模式下可以正常工作。

您能否提供有关解决此问题的指导? 是否需要任何其他配置或步骤才能使 USB 外设模式正常工作?

感谢您的帮助。

此致、

Laxman

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

    尊敬的 Laxman:

    默认情况下、Processor SDK Linux 已在双角色模式下配置了 AM62x USB0端口、该端口可以在外设模式下工作。 您无需在内核 defconfig 和内核设备树中修改 USB 中任何与之相关的内容。

    您唯一需要做的是引导电路板并加载 USB 小工具驱动程序、然后将 USB0端口连接到 USB 主机。

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

    刘斌、您好!

    我在[目标板名称]上以外设模式启用 USB0时遇到问题。 我加载了所有与 USB 相关的模块、但我的 PC 没有通过 USB 检测到目标板。 以下是详细信息:

    内核版本:  Linux-5.10.168

     电路板:  am62a7.

    设备树设置:

    usbss0 (&U)

    状态="正常";

    TI、VBUS 分频器;

    };

    &usb0{

    DR_MODE ="主机";

    pinctrl-names ="默认值";

    pinctrl-0 =<&MAIN_USb0_PINS_DEFAULT>;

    };

    MAIN_usb0_PINS_DEFAULT:MAIN_usb0_PINS_DEFAULT{
    PINCTL-SINGLE、PINS =<
    AM62AX_IOPAD (0x0254、PIN_INPUT、0)/*(C20) USB0_DRVVBUS */
    >;
    };

    已加载的模块:

    # lsod | grep usb
    usb_f_ACM 16384 2.
    u_serial 20480 1 usb_f_ACM
    usb_f_f_f_f_fs 49152 3.
    usb_f_RNDIS 32768 2.
    U_ether 28672 1 usb_f_rNDIS
    libcomposite 61440 13 usb_f_rNDIS、g_serial、usb_f_f_f_f_f_fs、usb_f_acm
    usbcore 266240 3 xhci_hcd、ehci_hcd、xhci_plat_hcd
    udc_core 32768 7 usb_f_rNDIS、u_ether、u_serial、libcomposite、usb_f_fs、usb_f_ACM、dwc3
    usb_common 16384 6 xhci_hcd、usbcore、libcomposite、xhci_plat_hcd、dwc3、udc_core

    /sys/class/udc 的输出:

    # pwd
    /sys/class/udc
    # ls
    #(无输出)

    # lsusb
    总线001设备001:ID 1d6b:0002
    总线002设备001:ID 1d6b:0003

    采取的步骤:

    1. 已加载所有 USB 相关模块。
    2. 已检查设备树设置。

    尽管执行了这些步骤、PC 仍然无法检测到目标板。 下没有列出 UDC /sys/class/udc

    问题:

    1. 为了在外设模式下启用 USB0、我是否需要在内核或设备树中更改任何特定设置?
    2. 我是否可能缺少其他配置或模块?
    3. 如何进一步调试此问题、以确定 UDC 未显示的原因?

    非常感谢您提供任何帮助或建议。

    谢谢!

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [报价用户 id="612564" url="~/support/processors-group/processors/f/processors-forum/1381934/processor-sdk-am62x-processor-sdk-am62x_dts/5300375 #5300375"]

    &usb0{

    DR_MODE ="主机";

    [报价]

    您是否将 USB0连接到 PC? 如果内核 DTS 在主机模式下设置 USB0、则 PC 不会检测到它。

    为了在外设模式下启用 USB0、我需要在内核或设备树中更改什么特定内容吗?

    正如我所说、默认情况下、SDK 将 USB0配置为双角色模式、即支持 USB 作为外设。 您不必更改任何配置。

    我可能缺少其他配置或模块吗?

    可能不需要、因为您的 USB0在主机模式下工作。 只需确保启用要使用的 USB 小工具驱动程序即可。

    如何进一步调试此问题以确定为何 UDC 未显示?

    正如我所说、您的 USB0不是处于器件模式。

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

    尊敬的 Bin Lu:

    我已经加载了g_serial小工具模块、但不确定如何验证 USB0是否确实在外设模式下运行。

    # dmesg | grep g_serial
    [209.266630] UDC-core:找不到可用的 UDC -已添加[g_serial]至待定驱动程序列表

    # lsusb
    总线001设备001:ID 1d6b:0002
    总线002设备001:ID 1d6b:0003

    # ifconfig usb0
    USB0:获取接口信息时出错:未找到设备
    #

    尽管执行了这些步骤、但我不确定 USB0是否已正确配置为外设。 您能否就以下方面提供指导:

    要执行额外的步骤或命令来验证 USB0是否处于外设模式?

    感谢您的帮助。

    此致、

    Laxman

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

    Laxman、

    我觉得您的两篇最新帖子都有冲突消息、第二篇帖子有很多噪音、格式设置不当。 我很难清楚地了解您的问题。

    您是否可以要求编辑两篇帖子以清楚地描述问题?

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

    刘斌、您好!

    我希望您能表现得好。

    首先,我想对我之前的消息造成的任何混淆表示歉意。 我意识到他们可能不清楚,我感谢你的耐心。

    在最新版本中使用 ConfigFS 配置 USB 小工具驱动程序时、我会遇到 UDC 绑定问题。 过去、我只需加载 g_ether 模块、就能在旧版本中实现 UDC 绑定。 但是、使用新版本和 ConfigFS 接口时、我看到 dmesg 中出现以下错误:


    [ 51.029853]正在注册 UDC 驱动程序。
    [51.155890] UDC 驱动器绑定 ret:-19.
    [51.159889] UDC 31000000.usb:无法启动 g:-19.
    以下是我使用的 ConfigFS 脚本:

    下面的脚本我将使用绑定 UDC 驱动程序:


    #!/bin/sh

    #检查脚本是否以 root 身份运行
    如果["$(id -u)"-ne 0 ];则
    echo "此脚本必须以 root 身份运行"
    退出1
    和数据

    #将 USB IRQ 移至 Core 3
    usb_irq=$(awk '/usb/{print 1美元}'/proc/interrupts | sed 's/://g')
    如果[-n "$USB_IRQ"];则
    回显"找到的 USB IRQ:$USB_IRQ"
    对于$USB_IRQ 中的 IRQ;执行
    irq_path="/proc/irq $IRQ/SMP_Affinity"
    如果[-e "$IRQ_PATH"];则
    echo 8 >"$IRQ_path"
    echo "将 IRQ $IRQ 关联设置为核心3"
    设计
    echo "$IRQ_PATH 中的 IRQ $IRQ"未找到 SMP_Affinity 文件"
    和数据
    停止更新的
    设计
    回显"未找到 USB IRQ "
    和数据

    #加载必要的内核模块
    modprobe libcomposite
    调制探针 USB_f_RNDIS
    modprobe usb_f_fs
    modprobe usb_f_acm
    modprobe usbcore
    modprobe ehci_hcd
    modprobe xhci_hcd

    #装载 configfs 文件系统
    mount -t configfs none /sys/kernel/config

    #创建和配置小工具
    cd /sys/kernel/config/usb_gadget
    mkdir g & CD g

    #设置 USB 小工具描述符
    回波0x099E > idVendor # Trimble
    echo 0x0004 > idProduct # Trimble USB 产品 ID
    echo 0x0100 > bcdDevice # v1.0.0
    echo 0x0200 > bcdUSB # USB 2.0

    回波0xEF > bDeviceClass
    回波0x02 > bDeviceSubClass
    回显0x01 > bDeviceProtocol

    #设置小工具字符串
    mkdir -p 字符串/0x409
    echo "Trimble"> strings/0x409/制造商
    echo "合金"> strings/0x409/product

    #为串行、网络和 MTP 创建函数
    mkdir -p functions/acm.usb0 # serial
    mkdir -p Functions/rndis.usb0 # network
    mkdir -p functions/fs.MTP # MTP

    #创建配置和链接功能到它
    mkdir -p configs/C.1
    echo 250 > configs/C.1/MaxPower
    ln -s functions/rndis.usb0 configs/c.1/
    ln -s functions/acm.usb0 configs/c.1/
    LN -s 函数/fs.MTP 配置/C.1

    #为 MTP 设置 FunctionFS 并启动服务
    mkdir /dev/ffs-mtp
    mount -t functionfs MTP /dev/ffs-mtp

    #检查 FFS 安装是否成功
    如果[$? -ne 0 ];然后
    ECHO "无法为 MTP 安装 FunctionFS "
    退出1
    和数据

    #启动 umtprd 服务
    /usr/sbin/umtprd >/dev/null &
    如果[$? -ne 0 ];然后
    echo "启动 umtprd 服务失败"
    退出1
    和数据

    #操作系统描述符
    echo 1 > os_desc/use
    echo 0xcd > os_desc/b_vender_code
    echo MSFT100 > os_desc/qw_sign

    echo RNDIS >功能/ rndis.usb0/os_desc/interface.rndis/compatible_id
    ECHO 5162001 > Functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id

    ln -s configs/C.1 os_desc

    #确保在绑定之前设置所有配置
    udevadm settle -t 5||:

    #绑定 UDC 驱动程序
    LS /sys/class/udc > UDC
    如果[$? -ne 0 ];然后
    echo "绑定 UDC 驱动程序失败"
    退出1
    和数据

    echo "USB 小工具设置完成"


    尽管执行了以下步骤、但 UDC 绑定仍会失败、并显示错误代码-19。 您能否帮助我了解可能导致此问题的原因以及如何解决?

    提前感谢您的帮助。

    此致、

    Laxman

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

    尊敬的 Laxman:

    感谢新的细节。 它更干净!

    过去、我只需加载 g_ether 模块、便可获得使用旧版本的 UDC 绑定。 但是、使用新版本和 ConfigFS 接口时、我在 dmesg 中看到以下错误:

    让我们后退一步、在新的 SDK 版本(而不是 USB configfs)中、您能让 g_ether 模块以与旧的 SDK 版本相同的方式工作吗?

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

    刘斌、您好!

    我目前使用的内核版本为5.10.168。 我已经设法使该g_ether模块与旧 SDK 版本中的模块一样工作。 但是、使用新的 ConfigFS 接口时会遇到问题。 具体来说、我在尝试绑定 UDC 时在 dmesg 中看到以下错误:

    [ 62.292675] USB_Add_functionret:-19

    [ 62.308068] UDC 31000000.usb:无法启动 G1-19

    对于如何使用 ConfigFS 解决此问题、您有什么见解吗

    谢谢!

    Laxman

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

    尊敬的 Laxman:

    除了您的 USB configfs 脚本、您是否可以使用下面附加的脚本进行测试、以查看您是否可以只使用单个功能(串行)创建 USB 小工具?

    e2e.ti.com/.../8814.usbconfigfs.sh.txt

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

    尊敬的 Bin Lu:

    我写信通知您、USB 小工具配置脚本已成功执行。 下面是 USB 小工具执行和当前状态的详细信息。

    正在创建 acm.usb0 ...
    [ 56.079965]正在注册 UDC 驱动程序。
    [ 56.083542] configfs_composite bind 函数
    [56.091627]复合开发准备 ret:0
    [56.095893]尝试添加函数:ACM.
    [ 56.100854] USB_Add_function:ret:0
    [56.104575]已成功添加函数:ACM
    [56.114746] UDC 驱动器绑定 ret:0
    [听不清

    # dmesg | grep -i usb.
    [ 56.100854] USB_Add_function:ret:0

    # ls /sys/kernel/config/usb_gadget/g1
    UDC bMaxPacketSize0函数 os_desc
    bDeviceClass bcdDevice idProduct 字符串
    bDeviceProtocol bcdUSB idVendor
    bDeviceSubClass CONFIGs max_speed

    # cat /sys/kernel/config/usb_gadget/g1/UDC
    31000000.usb.
    #

    上述结果表明已成功创建了 USB 小工具、UDC 绑定到设备31000000.usb

    如果需要进一步的信息或措施、请告知我。

    此致、

    Laxman B

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

    好的、现在如果您将 AM62x USB0端口连接到 PC USB 端口、PC 是否会检测到它为串行端口?

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

    是的、它显示 COM17 USB Serial Device (USB 串行器件)

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

    好的、这意味着您在您的电路板上没有 USB 硬件或 Linux 问题。 该问题可能出现在您的 USB configfs 脚本中。

    请将您的脚本与我的脚本进行比较、从单一的串行功能开始、逐步添加新的特性/功能、然后进行调试以查看脚本中导致问题的位置。

x 出现错误。请重试或与管理员联系。