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.
工具与软件:
您好、E2E 团队:
am6442 SR2 USB 控制器出现了问题。 如果我们通过设置脚本配置 USB 器件、控制器有时会导致系统挂起。 只有硬下电上电有助于重置系统。
am6442系统:
测试设置:
定制 am6442板通过 USB2.0连接到 Win10 PC。 PC 尝试通过 RNDIS 以太网设备建立 SSH 连接。 成功建立连接后、Windows 系统会向器件发送重新启动命令。 关闭并重新打开电源后、Windows 系统尝试通过 USB RNDIS 再次连接。 测试过程中不会移除 USB 电缆连接、而是在进行孔测试时连接 Windows 10 PC 和器件。 系统挂起不可重现,有时需要7次重启,有时超过500次。
以下脚本使用 CDC-ECM 和 RNDIS 在 Linux 初始化时将 USB 控制器配置为器件。 控制器在 Linux 内核的器件树中配置为"OTG"。
脚本摘要:
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#配置1适用于 CDC
mkdir -p configs/C.1
echo "${NET_USB_ATTR}"> configs/C.1/bmAttributes
echo "${NET_USB_PWR}"> configs/C.1/MaxPower
mkdir -p "configs/c.1/strings/${CONFIG_USB_LANGID}"
echo "CDC">"configs/C.1/strings/${CONFIG_USB_LANGID}/CONFIGURATION"
mkdir -p 函数/ ecm.usb0
mkdir -p configs/c.2.
echo "${NET_USB_ATTR}"> configs/C.2/bmAttributes
echo "${NET_USB_PWR}"> configs/C.2/MaxPower
mkdir -p "configs/c.2/strings/${CONFIG_USB_LANGID}"
echo "RNDIS">"configs/c.2/strings/${CONFIG_USB_LANGID}/CONFIGURATION "
mkdir -p 函数/ rndis.usb0
#在 Windows 7和更高版本上,默认情况下将使用 RNDIS 5.1驱动程序。
#但它不是很好的工作。 RNDIS 6.0驱动程序工作得更好。 In
#为了使该驱动程序自动加载,我们必须使用
# Microsoft 特定的 USB 扩展。
echo "1"> os_desc/use
echo "${MS_VENDOR_CODE}"> os_desc/b_vendor_code
echo "${ms_qw_sign}"> os_desc/qw_sign
init_mac_leases 3.
本地 host_mac;host_mac=$(get_mac "${NET_USB_INTERFACE}""${NET_USB_ConfigFile}""host_")
log_info "使用 host_mac ${host_mac}和序列号${serial_number}初始化接口${NET_USB_INTERFACE}的 USB net "
echo "${host_mac}"> functions/rndis.usb0/host_addr
本地 Mac;mac=$(get_mac "${NET_USB_INTERFACE}""${NET_USB_ConfigFile}")
log_info "使用 IP ${NET_USB_IP}和 MAC ${Mac}设置接口${NET_USB_INTERFACE}"
echo "${Mac}"> Functions/ecm.usb0/dev_addr
echo "${Mac}"> Functions/ecm.usb0/host_addr
echo "${Mac}"> Functions/rndis.usb0/dev_addr
echo "${Mac}"> Functions/rndis.usb0/host_addr
echo "${MS_COMPAT_ID}"> functions/rndis.usb0/os_desc/interface.rndis/compatible_id
echo "${MS_SUBCOMPAT_ID}"> functions/rndis.usb0/os_desc/interface.rndis/sub_compatible_id
ln -s functions/ecm.usb0 configs/C.1
LN -s 函数/ rndis.usb0 configs/C.2
ln -s configs/C.2 os_desc
#添加适当的 USB 设备到小工具( AM64x 特定)
echo "f400000.usb"> UDC"
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
出现"echo "f400000.usb"> UDC"后、系统挂起。
在系统挂起的情况下、Linux 停止工作、无法通过 UART、以太网和 USB 进行通信。
我们检查了 am6442的芯片勘误表、添加了"i2409—USB:USB2 PHY 由于短暂暂停而锁定"的 bugfix、很遗憾该问题没有解决。
阅读 Cadence 器件勘误表(https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/drivers/usb/cdns3/cdns3-gadget.c?h=ti-rt-linux-6.1.y-cicd)、
我们 从 cdns-plat.c 驱动程序代码中删除了电源管理部分:
遗憾的是、这对于在初始化时卡住没有帮助。 移除 PM 任务可让系统引导、但 USB 设备上没有通信、通过脚本重新配置设备会导致系统挂起。
我们发现这个 E2E 帖子可能与我们的问题相关:
此致、
Stefan
您好、Stefan、
我已将您的问题分配给我们的专家。 他今天不在办公室、所以明天当他在办公室或下周早些时候应该会有反应。
对于延迟、我们深表歉意。
此致、
Suren
您好、Stefan
注意到这一问题的紧迫性。 我们的答复可能比通常要慢、因为这位主要专家下周访问受限。
几个后续问题
1) 1)有什么方法可以查看不同的主机是否给出了不同的结果? Window 11还是 Linux 主机?
2)您是否有更多的故障数据,有多少电路板尝试过,有多少发生故障,您是否认为这是某种软件或芯片的边缘性或每块电路板目前都容易受到它与延长的重启测试?
3)主机端的电源循环是否正确、无噪声/干扰等以及软件启动序列是否无干扰? 一些客户通过 MCCI (例如产品)进行 USB 电缆连接/断开、以进行稳健性测试。 稳健性测试主要是关于打开/关闭主机电源
4) 4)您是否可以在 TI EVM 上复制此问题?
尊敬的 Mukul:
根据您的后续问题:
1:我们目前只在 Win10系统上进行评估,但我们也可以设置 Linux (Debian)测试。
2:我们看到不同的定制板上的故障,使用相同的内核和 rootfs。 我们有两种不同的硬件(产品)型号采用 am64器件、两块电路板上都存在问题。 我们总共看到了三个定制电路板上的问题。 我们没有任何其他的长期 USB 测试。 遗憾的是、崩溃后电路板停止工作、即使 Linux UART 控制台缓冲区也没有被写出来、因此我们没有错误本身的任何快照。
我们为两个不同的描述符配置 USB 内核、我们在 Linux 驱动程序中找到了有关 Buffer init 的 Cadence 注释、我们现在重点介绍 USB 内核 HW init。 如果仅配置一个描述符、我们也会看到错误。
3:am64板使用 PMIC 提供内核电压、并使用单独的转换器提供 DDR4电压。 主机 PC 不会进行下电上电、因此主机在整个测试期间保持相同的电源状态。 在重新启动测试期间、我们不会断开电缆连接。
4:现在我们现在还没有测试 am64-EVM 板、我们计划使用 am64-EVM 构建测试。
BR
Stefan
您好、Stefan、
本周和下周我要参加一个全天培训、但没有任何 EVM 实践工作的参与。 但是、如果您能够在 AM64x GPEVM 上重现该问题、请告诉我、然后我将进行研究。
我不记得我们的客户在 Linux 中遇到了 AM64x USB 器件模式问题(但我现在不记得您观察到它是否发生了死锁)。 但是、只有在内核设备树中的 USB0 dr_mode 配置为"peripheral"时才会发生该问题、但如果 dr_mode ="org"、则不会发生该问题。 ("OTG"是 SDK 内核中 USB0的默认设置。)
您好、Bin、
我们目前设置了两个连接到不同 PC 系统的 am64-EVM 板、并返回了测试结果。 我们在 dr_mode ="org"下运行 USB 控制器
BR
Stefan
您好、Stefan、
我们返回测试结果。 [报价]您是否意味着您能够在两个 AM64x-EVM 上重现该问题?
您好、Bin、
尊敬的 Mukul:
是的、我们能够 tor 在使用不同 PC 系统的不同 am64-EVM 板上重现错误。 我们的设置如下:
设置1:(使用 VMware Debian 赢取10)
重新引导脚本正在 VMware 中运行
am64-EVM
定制硬件
设置2:(WIN 10)
重新启动脚本正在 Windows 上运行
2个不同的 am64-EVM 板
BR
Stefan
您好、Stefan、
感谢您的参与。 我本周仍在培训、下周将回到工作岗位、尝试在我的 EVM 上重现此问题并进行研究。 由于我在培训期间这两周的积累工作、我下周的培训流程会更慢。 我会继续向您发布消息。
您好、Stefan、
[报价 userid="546839" url="~/support/processors-group/processors/f/processors-forum/1374505/am6442-usb-device-configure-cause-linux-system-hang/5271765 #5271765"]设置1:(使用 VMware Debian 赢取10)
重新引导脚本正在 VMware 中运行
[报价]在这种设置中、AM64x USB RNDIS 小工具被枚举/与运行在 Win10 VMware (而不是 Win10)中的 Debian 进行通信、对吗?
我提出的问题是、因为我没有可用于测试的 Windows PC、我只能访问 Linux PC 来连接我的 AM64x GPEVM。
您好、Bin、
是的、这是正确的、USB 堆栈在 Linux 上运行。
BR
Stefan
您好、Stefan、
感谢您的确认。 下周早些时候、我将尝试重现 AM64x GPEVM 与 Linux USB 主机连接的问题。
您好、Stefan、
很抱歉迟到了响应。
我无法在 AM64x GPEVM 上重现此问题。 我不知道哪个处理器 SDK 版本使用内核 v6.1-20、因此我使用了内核 v6.1.33的 SDK v9.0.0.3。
我看到您的 USB 小工具配置使用 ECM 和 RNDIS 小工具功能、因此我使用以下 USB 小工具配置脚本创建具有 ECM 和 RNDIS 功能的复合小工具。 它在 EVM 和 Linux PC 上产生两个 USB 以太网接口。 然后、我为两者分配了不同的子网 IP 地址(usb0:192.168.3.x、usb1:192.168.4.x)、并可以通过 ping 和 ssh 连接 EVM。
在 ssh 会话中"重新启动" EVM 后、重复相同的设置、然后我可以使用 ether usb0或 USB1再次从 Linux PC ssh 到 EVM。
您是否看到我做了哪些与您测试的不同之处?
BTy、我刚刚将默认 WIC 映像"tisdk-default-image-am64xx-evm.wic.xz"从 SDK 刷写到 SD 卡、并将 configfs 脚本复制到/home/root 目录。 Linux 中没有其他更改。
您好、Bin、
感谢您的支持! 我们的设置与默认映像略有不同、因为我们需要使用最新的 sysfw 来在 MII 模式下启用 PRU_eth。 在多次重新启动(有时高达800)后、我们会遇到挂起问题。 最初、重新引导将继续进行、而不会出现任何问题或挂起。
您好、Stefan、
谢谢。 现在我理解挂起问题只会在重启数百次后发生、但是
我们的设置与默认映像稍有不同、因为我们需要使用最新的 sysfw
您是否测试过 SDK 中相同 sysfw 是否出现此问题? 我正在尝试缩小症状重现的部件范围。
您好、Bin、
您是否测试过 SDK 中相同 sysfw 是否出现此问题? 我正在尝试缩小症状重现的组件范围。
现在还没有、因为 MII 主题。 我可以设置一个测试,但这需要一些时间~1周
您好、Stefan、
[报价 userid="546839" url="~/support/processors-group/processors/f/processors-forum/1374505/am6442-usb-device-configure-cause-linux-system-hang/5308533 #5308533"]。 我可以设置一个测试,但这需要一些时间~1周[/报价]期待结果。
同时、如果我可以对我的设置执行任何操作、请根据任何 SDK 版本提供准确的说明。 请注意、我有我自己的 configfs 脚本(见上文)。 您在第一篇文章中提供的内容未命中某些宏的定义。
您好 Bin、
我已附上 Windows PC 上的脚本(PowerShell 脚本)供您参考。 我们通过 RNDIS 建立 SSH 连接、以重新启动电路板。 该测试的目的是验证 USB 接口是否正常运行以及电路板是否已启动并准备就绪。
此致、
Stefan
# Path to Plink executable $plinkPath = "plink" # Remote host details $remoteHost = "192.168.200.1" $username = "root" $password = "root" # Counter for the number of reboots $rebootCount = 0 # Function to establish SSH connection and reboot the remote system function Reboot-RemoteSystem { param ( [string]$rhost, [string]$user, [string]$pass ) $command = "echo y | $plinkPath -ssh $user@$remoteHost -pw $pass reboot" $output = Invoke-Expression -Command $command if ($output -like "*reboot*") { return $true } else { return $false } } # Infinite loop to attempt connection, reboot, and count while ($true) { $success = Reboot-RemoteSystem -host $remoteHost -user $username -pass $password if ($success) { Write-Output "The system did not reboot" } else { $rebootCount++ Write-Output "Reboot count: $rebootCount" } # Wait for 1 minute before attempting to reconnect Start-Sleep -Seconds 45 }
您好、Stefan、
我没有 Windows PC 的访问权限。 我的计算机都基于 Linux。
我修改了上面附加的脚本(usbconfigfs.sh.txt):
funcs=(" ecm.usb0"" rndis.usb0")
最终目的
funcs=(" rndis.usb0")
这样、USB 小工具只具有 RNDIS 功能、我的 Linux PC 仍然使用"RNDIS_HOST"驱动程序枚举它。
我知道您必须使用 USB 小工具 configfs、但您能否尝试使用 Linux 主机重现该问题? 然后我可以在我这边复制并调试它。
您好、Stefan、
我想我没有清楚说明。
我应该能够在 AM64x EVM 上使用您的指令运行任何 Linux 设置、但我面临的挑战是 USB 主机端、因为我无法访问 Windows PC。
因此、如果您可以保持 AM64x 端软件设置相同、但只尝试使用 Linux PC 对其进行测试。 如果 Linux PC 也出现问题、我可以复制它并进行调试。
您好、Stefan、
到下周结束、Bin 已经不在办公室了。 请预计响应会延迟。
您好、Stefan、
感谢您的参与。 我可以按照这个流程进行操作、并在我的 EVM 上运行相同的测试。 它已运行58次重新启动、尚未触发此问题。 我会让它整夜运行。
同时、您能否应用以下内核补丁并在您的设置上进行测试、以查看它是否可以解决问题? 此补丁修复了内核驱动程序错误、该错误使用 g_printer 小工具驱动程序生成繁忙循环、从而导致 AM64x 上的 Linux 系统挂起。 我查看了内核 ECM 和 RNDIS 小工具驱动程序、该错误似乎也适用于此处。
e2e.ti.com/.../0001_2D00_usb_2D00_cdns3_2D00_fix_2D00_linked_2D00_list_2D00_corruption.patch
您好、Bin、
很好、我们看到多达~800次重新启动、直到出现错误、变化非常大。
我将添加到定制内核的路径、因为我现在没有运行 ti Yocto 设置。
BR
Stefan
您好、Stefan
我猜这是很难判断修补程序是否改善了一切,如果变化是高? 您是在您的板或 EVM 上执行这些测试、还是在两者同时执行?
您好、Stefan、
如果我们通过设置脚本配置 USB 设备、控制器有时会导致系统挂起。 只有硬下电上电有助于重置系统。 [报价]您是说使用热复位(例如将 RESET_REQz 引脚接地)不会在发生锁定时复位系统吗?
您好、Stefan、
不知为什么、我的 AM64x EVM 和 Linux PC 之间的 USB 网络不可靠、该测试经常卡在 sshpass 调用中。 因此我更改了 PC 端脚本以使测试更可靠(主要是缩短睡眠时间、并在 sshpass 之前执行 ping 命令)。
我不是网络专家、但我对 Linux PC 端的以下内核消息感到担忧:
IPv6:USB0:IPv6重复地址 fe80:206:77ff:FE12:ab50被00:06:77:12:AB:50检测到!
因此、我更改了 EVM 脚本 setup-rndis.sh、以在 EVM 和 PC 上使用不同的 MAC 地址、如下所示、删除主机上的此内核消息。 如果可以、请告诉我。
Mac1="00:06:77:12:AB:50"
Mac2="00:06:77:12:AB:51"
dev_mac1="${mac1}"
host_mac1="${mac2}"
dev_mac2="${mac1}"
host_mac2="${mac2}"
Stefan、您好、下面我将向您介绍一下最新情况:
我可以多次重现重启锁定、尽管大多数情况下(超过20次)锁定发生在 Linux 关闭阶段、但我看到在 Linux 启动期间(在 setup-rndis.sh 启动时)发生了两次锁定。
然后、我进一步简化了测试设置-不要使用主机 ssh 连接、而是重复执行 setup-rndis.sh 启动和 setup-rndis.sh 停止、而不重新启动 Linux、但仍然保持 USB 电缆连接到 USB 主机。 这使得锁定发生得非常快(几分钟内)。
我还从 setup-rndis.sh 中删除了 RNDIS 小工具功能、因此仅使用 ECM、仍会发生锁定。
我上周四提供的补丁0001-USB-cdns3-fix-linked-list-corruption.patch 似乎没有帮助、在我的测试中该补丁仍然会锁定。
我现在能够可靠、快速地重现锁定、并将从星期一开始调试。
我猜很难判断补丁是否改进了一切、如果变化很大? 您是在您的电路板上执行这些测试还是在 EVM 上执行这些测试?
您的意思是使用热复位(如将 RESET_REQz 引脚接地)是否不会在锁定时复位系统?
您好、Stefan、
当 USB configfs 脚本执行 echo "${udc_device}">${g}/udc 或 echo ">${g}/udc 时、cdns3_gadget_udc_start ()或 cdns3_gadget_udc_stop ()中的随机位置似乎会发生锁定。 我将继续调试...
您好、Bin、
我们看到系统在同一点挂起:
在"echo "f400000.usb"> UDC"后、系统挂起
如第一个帖子中所述。
您好、Stefan、
是的,我看到的大约一半的锁定情况是当"echo f400000.usb > udc"时,这会触发内核函数 cdns3_gadget_udc_start ()。 我还可以看到、当发生锁定时、JTAG 无法连接到 DDR 或任何其他 AM64x 外设。 当发生锁定时、SoC 似乎已经处于不良状态。 我正在继续调试该问题、但我不确定多久才能找出根本原因并解决该问题。 当发生锁定时、您是否考虑在 Linux 中使用看门狗计时器来重置系统? 在问题解决之前、这可以是项目中的计划 B。
您好、Bin、
我们在 am64-EVM 上进行了测试、而且看门狗权变措施可以起作用。 我们开始在定制硬件上评估它。
BR
Stefan
您好、Stefan、
感谢您的更新。 我们会继续对其进行调试、并会不断向您发布最新消息。