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.
工具与软件:
主题:[目标板]上的 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 */
>;
};
我已验证以下内容:
dwc3
和dwc3-gadget
)已加载。 尽管进行了这些检查、但 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
采取的步骤:
尽管执行了这些步骤、PC 仍然无法检测到目标板。 下没有列出 UDC /sys/class/udc
。
问题:
非常感谢您提供任何帮助或建议。
谢谢!
&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_function:ret:-19
[ 62.308068] UDC 31000000.usb:无法启动 G1:-19
对于如何使用 ConfigFS 解决此问题、您有什么见解吗
谢谢!
Laxman
尊敬的 Laxman:
除了您的 USB configfs 脚本、您是否可以使用下面附加的脚本进行测试、以查看您是否可以只使用单个功能(串行)创建 USB 小工具?
尊敬的 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 脚本中。
请将您的脚本与我的脚本进行比较、从单一的串行功能开始、逐步添加新的特性/功能、然后进行调试以查看脚本中导致问题的位置。