首页 > 产品 > 微控制器 (MCU) 和处理器 > 使用 Linux 的 Sitara™ 设备中的 USB 系统设计 >

基于 Arm 的处理器

最新课程

热门课程

7 在 Linux 中调试 USB

这是“使用 Linux 的 Sitara 器件 USB 系统 设计”系列的 第七个视频, 介绍 Linux 中的 USB 调试。 本视频并不是 有关如何在 Linux 中 调试 USB 问题的深入探讨, 而是对可用于 调试 USB 问题的 诸多调试选项的简介。 由软件引起的 USB 问题主要有两种。 一种是 Linux USB 误配置, 这会导致 USB 软件初始化失败。 另一种是 USB 软件错误, 这会导致 USB 无法正常工作。 在本视频中, 我们将介绍两种 用于调试这两类 USB 问题的方法。 正如我们在以前的视频中 所学到的,这是一个系列。 在 Linux 中实现 USB 是很复杂的。 许多内核配置 选项、设备树绑定、 和许多内核模块 .ko 依赖项具有依赖性 以及许多驱动程序 。 在这些步骤中的 任何一步出现可能 导致 USB 初始化失败的错误 都不是什么稀奇的事情。 我们将首先了解如何 知道 USB 初始化是成功 还是失败,然后了解 它将如何确定 误配置发生在哪里。 在 USB 主机模式下, 我们可以使用 lsusb 命令 来检查 USB 初始化是成功 还是失败。 如果成功, lsusb 命令应该 返回 USB 策略信息, 而如果失败, lsusb 命令则应该 返回这个负 99 错误消息。 在 USB 设备模式下, 可以使用 sysfs 条目 /sys/class/udc 来检查 USB 初始化是成功还是失败。 如果成功,在这个位置应 有一个条目。 该条目名称可能因 Sitara 器件不同而 不同。 而如果失败, 这个位置则会是空的。 为找出 USB 初始化 失败的根本原因, 我们首先要检查 记录内核启动过程的 内核 dmesg 日志, 看看是否有来自 USB 组件的错误消息。 最好检查整个 内核启动日志, 而不要使用 grep 之类的命令来筛选日志, 因为一些与 USB 相关的消息并没有 USB 这个关键字。 接着,我们需要确保 所有需要的内核配置 选项均已启用。 有关 MUSB 配置的详细信息, 请参阅本系列的第二个视频。 有关 DWC3 配置的详细信息, 请参阅本系列的第三个视频。 此外,我们还 提供一些 Wiki 文档 来解释这些内核配置。 此处提供了相关的链接。 为避免内核选项误配置, 我们建议以 Processor SDK Linux 内核中提供的 evm defconfig 为切入点, 然后进行微调, 使其适合您的产品。 还可以使用 lsmod 命令来检查是否所有 USB 驱动程序模块 都加载到了内存中。 如果没有,我们必须 检查路由器文件系统, 看看这些模块 .ko 文件是否在正确的位置。 我们还必须检查 设备树设置,以确保 所有与 USB 相关的 DT 节点都已启用, 并且 dr_mode 设置正确。 对于使用 AMS 文件 7X 的 设计,请使用电路板原理图 对 Extcon DT 节点进行 仔细检查,以确保 TPL 编号 彼此匹配。 有关 MUSB DT 设置的详细信息, 请参阅本系列的第二个视频。 有关 DWC3 DT 设置的详细信息, 请参阅本系列的第三个视频。 此外,我们还提供了 一些 Wiki 和内核文档, 来解释这些 DT 绑定。 此处提供了相关的链接。 到目前为止 提到的诊断方法 都需要大量的手动操作, 因此,我编写了一个 批处理脚本 chkusb.sh, 它可以执行前面 提到的大部分检查。 您可以直接在 电路板上运行该脚本。 如发现误配置, 它会报告错误。 此脚本还没有包含在 Processor SDK 文件系统中, 但我曾在 TI E2E 论坛的许多线程中 多次发布它。 请在 TI E2E 论坛上搜索 chkusb.sh。 您应该能找到它。 它会有出人意料的效果。 第二种 USB 问题 是 USB 运行时故障。 例如枚举失败, 或者 USB 主机和 器件之间的 USB 通信中断。 此处列出了 可以用来调试 这类问题的方法。 首先,我们需要 检查 USB 硬件设计。 请参阅本系列的第一个 视频以获取详细信息。 然后查看电路板 原理图和布局, 找出任何与 USB 相关的错误。 在必要的时候, 我们还需要进行 USB 眼图测试。 当 USB 运行异常时, 内核 USB 驱动程序 有时会打印错误消息 或导致内核崩溃转储, 因此请检查内核 dmesg 日志。 这些消息可能是 相应问题的首要提示。 要调试 USB 运行时故障, 我们需要获得 更多内核调试日志。 动态调试是一个可以 帮助我们的内核功能。 我们可以使用该功能 在运行时启用或禁用 内核调试日志和 Linux。 此培训视频解释了 如何使用内核 动态调试功能。 这里是这个视频的链接。 我们可使用动态调试 来获取有关 USB 内核 或类/小工具驱动程序的调试日志。 Ftrace 是另一种 内核调试功能, 它可以帮助我们从 USB 获得内核调试日志。 这是指向解释 ftrace 的内核文档的 链接。 我们可以使用 ftrace 事件跟踪 来获得有关 MUSB、DWC3 和 xHCI 控制器驱动程序的 调试日志。 这是指向解释事件 跟踪的内核文档的 链接。 这里列出了 MUSB 控制器驱动程序的 所有事件跟踪标志。 我们可以选择性地 打开它们,来启用 MUSB 调试日志, 以便了解 MUSB 驱动程序活动。 这里列出了 DWC3 控制器驱动程序的 所有事件跟踪标志。 这里列出了截至 内核 4.9 的 xHCI 控制器驱动程序的 所有事件跟踪标志。 内核 4.14 在 xHCI 驱动 程序中添加了更多事件跟踪标志, 以便提供更多有关 xHCI 内部活动的信息。 内核 4.14 将会 包含在即将推出的 Processor SDK 版本中。 有时我们需要 在调试问题时 转储寄存器。 这里显示了用于 为 MUSB 和 DWC3 控制器 转储寄存器的命令。 xHCI 控制器驱动 程序没有可用于转储 xHCI 寄存器的 调试接口,因此我们 必须使用 devmem2 之类的工具来支持 xHCI。 到目前为止, 我们在 USB 主机或 设备上收集的调试 信息都是由软件报告的。 它告诉我们软件在 USB 硬件上看到了什么, 如果 USB 硬件发生故障, 信息可能不准确 或缺少详细信息。 因此,当调试 USB 问题时,我们经常 需要使用 USB 协议分析器 来捕捉 USB 总线跟踪信息。 协议分析器是独立于 USB 主机或设备的 USB 数据包嗅探器。 理想情况下, 由分析器捕捉的 总线跟踪信息可告诉我们 USB 总线上到底发生了什么。 我们学习了 如何诊断 USB 问题。 如果您仍然 无法解决您的问题, 请在 TI E2E 论坛上发布。 我们的 USB 专家将会为您提供帮助。 以上是本视频的全部 内容,如需更多信息, 请访问以下链接。 如有任何问题, 请将其发布在 TI E2E 论坛上。 谢谢观看。

这是“使用 Linux 的 Sitara 器件 USB 系统

设计”系列的 第七个视频,

介绍 Linux 中的 USB 调试。

本视频并不是 有关如何在 Linux 中

调试 USB 问题的深入探讨,

而是对可用于 调试 USB 问题的

诸多调试选项的简介。

由软件引起的 USB 问题主要有两种。

一种是 Linux USB 误配置,

这会导致 USB 软件初始化失败。

另一种是 USB 软件错误,

这会导致 USB 无法正常工作。

在本视频中, 我们将介绍两种

用于调试这两类 USB 问题的方法。

正如我们在以前的视频中 所学到的,这是一个系列。

在 Linux 中实现 USB 是很复杂的。

许多内核配置 选项、设备树绑定、

和许多内核模块 .ko 依赖项具有依赖性

以及许多驱动程序 。

在这些步骤中的 任何一步出现可能

导致 USB 初始化失败的错误

都不是什么稀奇的事情。

我们将首先了解如何 知道 USB 初始化是成功

还是失败,然后了解

它将如何确定 误配置发生在哪里。

在 USB 主机模式下, 我们可以使用 lsusb 命令

来检查 USB 初始化是成功

还是失败。

如果成功, lsusb 命令应该

返回 USB 策略信息,

而如果失败, lsusb 命令则应该

返回这个负 99 错误消息。

在 USB 设备模式下, 可以使用 sysfs 条目

/sys/class/udc 来检查 USB 初始化是成功还是失败。

如果成功,在这个位置应

有一个条目。

该条目名称可能因 Sitara 器件不同而

不同。

而如果失败, 这个位置则会是空的。

为找出 USB 初始化 失败的根本原因,

我们首先要检查 记录内核启动过程的

内核 dmesg 日志, 看看是否有来自

USB 组件的错误消息。

最好检查整个 内核启动日志,

而不要使用 grep 之类的命令来筛选日志,

因为一些与 USB 相关的消息并没有

USB 这个关键字。

接着,我们需要确保 所有需要的内核配置

选项均已启用。

有关 MUSB 配置的详细信息,

请参阅本系列的第二个视频。

有关 DWC3 配置的详细信息,

请参阅本系列的第三个视频。

此外,我们还 提供一些 Wiki 文档

来解释这些内核配置。

此处提供了相关的链接。

为避免内核选项误配置,

我们建议以 Processor SDK Linux 内核中提供的

evm defconfig 为切入点, 然后进行微调,

使其适合您的产品。

还可以使用 lsmod 命令来检查是否所有

USB 驱动程序模块 都加载到了内存中。

如果没有,我们必须 检查路由器文件系统,

看看这些模块 .ko 文件是否在正确的位置。

我们还必须检查 设备树设置,以确保

所有与 USB 相关的 DT 节点都已启用,

并且 dr_mode 设置正确。

对于使用 AMS 文件 7X 的 设计,请使用电路板原理图

对 Extcon DT 节点进行 仔细检查,以确保 TPL 编号

彼此匹配。

有关 MUSB DT 设置的详细信息,

请参阅本系列的第二个视频。

有关 DWC3 DT 设置的详细信息,

请参阅本系列的第三个视频。

此外,我们还提供了 一些 Wiki 和内核文档,

来解释这些 DT 绑定。

此处提供了相关的链接。

到目前为止 提到的诊断方法

都需要大量的手动操作,

因此,我编写了一个 批处理脚本 chkusb.sh,

它可以执行前面 提到的大部分检查。

您可以直接在 电路板上运行该脚本。

如发现误配置, 它会报告错误。

此脚本还没有包含在 Processor SDK 文件系统中,

但我曾在 TI E2E 论坛的许多线程中

多次发布它。

请在 TI E2E 论坛上搜索 chkusb.sh。

您应该能找到它。

它会有出人意料的效果。

第二种 USB 问题 是 USB 运行时故障。

例如枚举失败, 或者 USB 主机和

器件之间的 USB 通信中断。

此处列出了 可以用来调试

这类问题的方法。

首先,我们需要 检查 USB 硬件设计。

请参阅本系列的第一个 视频以获取详细信息。

然后查看电路板 原理图和布局,

找出任何与 USB 相关的错误。

在必要的时候, 我们还需要进行

USB 眼图测试。

当 USB 运行异常时, 内核 USB 驱动程序

有时会打印错误消息

或导致内核崩溃转储, 因此请检查内核 dmesg 日志。

这些消息可能是 相应问题的首要提示。

要调试 USB 运行时故障,

我们需要获得 更多内核调试日志。

动态调试是一个可以 帮助我们的内核功能。

我们可以使用该功能 在运行时启用或禁用

内核调试日志和 Linux。

此培训视频解释了

如何使用内核 动态调试功能。

这里是这个视频的链接。

我们可使用动态调试 来获取有关 USB 内核

或类/小工具驱动程序的调试日志。

Ftrace 是另一种 内核调试功能,

它可以帮助我们从 USB 获得内核调试日志。

这是指向解释 ftrace 的内核文档的

链接。

我们可以使用 ftrace 事件跟踪

来获得有关 MUSB、DWC3 和 xHCI 控制器驱动程序的

调试日志。

这是指向解释事件 跟踪的内核文档的

链接。

这里列出了 MUSB 控制器驱动程序的

所有事件跟踪标志。

我们可以选择性地 打开它们,来启用

MUSB 调试日志, 以便了解 MUSB 驱动程序活动。

这里列出了 DWC3 控制器驱动程序的

所有事件跟踪标志。

这里列出了截至 内核 4.9 的 xHCI

控制器驱动程序的 所有事件跟踪标志。

内核 4.14 在 xHCI 驱动 程序中添加了更多事件跟踪标志,

以便提供更多有关 xHCI 内部活动的信息。

内核 4.14 将会 包含在即将推出的

Processor SDK 版本中。

有时我们需要 在调试问题时

转储寄存器。

这里显示了用于 为 MUSB 和 DWC3 控制器

转储寄存器的命令。

xHCI 控制器驱动 程序没有可用于转储

xHCI 寄存器的 调试接口,因此我们

必须使用 devmem2 之类的工具来支持 xHCI。

到目前为止,

我们在 USB 主机或 设备上收集的调试

信息都是由软件报告的。

它告诉我们软件在 USB 硬件上看到了什么,

如果 USB 硬件发生故障,

信息可能不准确 或缺少详细信息。

因此,当调试 USB 问题时,我们经常

需要使用 USB 协议分析器 来捕捉 USB 总线跟踪信息。

协议分析器是独立于 USB 主机或设备的

USB 数据包嗅探器。

理想情况下, 由分析器捕捉的

总线跟踪信息可告诉我们 USB 总线上到底发生了什么。

我们学习了 如何诊断 USB 问题。

如果您仍然 无法解决您的问题,

请在 TI E2E 论坛上发布。

我们的 USB 专家将会为您提供帮助。

以上是本视频的全部 内容,如需更多信息,

请访问以下链接。

如有任何问题, 请将其发布在

TI E2E 论坛上。

谢谢观看。

视频报错
手机看
扫码用手机观看
收藏本课程

视频简介

7 在 Linux 中调试 USB

所属课程:使用 Linux 的 Sitara™ 设备中的 USB 系统设计 发布时间:2022.04.12 视频集数:7 本节视频时长:00:09:03

本培训概述了 Sitara 嵌入式处理器(AM335x、AM437x 和 AM57x)中的 USB 子系统。它还介绍了仅以数字为重点的 USB 硬件设计。包括参考设计、硬件设计清单和常见的设计错误。

TI培训小程序