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

基于 Arm 的处理器

最新课程

热门课程

4 在 Linux sysfs 中验证 USB

这是“使用 Linux 的 Sitara 器件 USB 系统设计” 系列的第四个视频。 根据前两个 视频中的一个视频, 我们可以为使用 任何 Sitara 器件的平台 配置相应的 USB 模块。 现在我们可以 加载 Linux, 而且 USB 可随时使用。 此时,我们可以通过许多 方法在 Linux 中验证 USB。 其中一种便是 Linux sysfs。 在本视频中,我将 解释我们可以使用 Linux sysfs 检查 USB 的哪些方面。 我们首先概括 介绍一下 sysfs, 然后解释 sysfs 中的 设备和驱动程序结构。 在进一步了解 sysfs 路由器后, 我们将会学习 如何在 sysfs 中 获取有关 MUSB 或 DWC3 运行时的更多信息。 首先,什么是 sysfs? Sysfs 是 Linux 中 基于 RAM 的虚拟 文件系统,可将 内核数据结构、属性 以及二者之间的 关系等内核内部 信息导出到用户空间。 在 sysfs 中,内核数据 结构以目录形式呈现。 数据结构的属性 呈现为常规文件, 它们之间的关系则 呈现为符号链接。 通常,sysfs 会 安装在 /sys 目录下。 请看右侧的示例。 它显示了目录 /sys/devices/soc0 下的所有文件。 第一项, power,是一个目录, 代表内核数据结构。 下面几项是常规文件, 代表 soc0 器件的属性。 最后一项, subsystem,是一个符号链接, 指示 soc0 器件属于 soc 总线。 这里是内核 4.9 sysfs 第一层的所有 目录。 每个目录都 保存着有关 sysfs 中 某个类别的信息。 其中有些很容易理解。 例如,firmware 目录具有设备树 信息。 fs 目录描述了 启用的文件系统。 module 目录描述了 内存中加载的所有 .ko 模块。 但 sysfs 中有一件 事情会比较令人困惑。 那就是 sysfs 如何描述设备 信息以及与设备 相关的驱动程序。 您可以看到这里有 一个称作 devices 的目录。 但在 sysfs 中, 似乎到处都在 通过符号链接 引用 devices 目录下的 信息。 在接下来的几张 幻灯片中,我将会 尝试解释 sysfs 如何 描述设备和相关的 驱动程序。 希望能为您解惑,以便 了解如何使用 sysfs 来验证运行时下的 USB。 关于设备和驱动程序, sysfs 描述两种类型的 内核数据结构 -- 设备和驱动程序。 设备描述为 /sys /devices 下的一个目录, 它保存该设备的所有属性。 驱动程序则描述为 /sys/bus/directory/drivers 之下的一个目录,它保存 该驱动程序的属性。 如图中深蓝色方框所示。 sysfs 中的其余信息 都是对设备 目录和驱动程序 目录的引用, 在图中仅显示为实线箭头。 在了解 sysfs 中的 设备和驱动程序结构后, 您便可以自如地 在 sysfs 中的这些 符号链接之间进行导航。 为更好地了解 sysfs 中的 这一设备和驱动程序结构, 我们可以通过 一个示例来看看 如何在 sysfs 中定义和 引用 AM335x RTC 设备。 我们使用此命令来 在 sysfs 中搜索 RTC 节点 并调用结果。 第一个在 /sys/devices/platform 下, 这是该 RTC 设备的定义。 该目录保存了 该器件的所有属性。 第二个是在 platform 总线下对它的引用。 第三个是在 omap_rtc 这一相关驱动程序下 对它的引用。 最后一个与设备 驱动程序结构无关。 它只是对 debugfs 中的 pinctrl 接口名称的重用。 让我们来看看 设备目录的内容。 每个目录都有 这些文件或子目录。 driver 是指向此设备的 驱动程序的符号链接。 of_node 是指向 此设备的设备树 节点的符号链接。 power 是一个 保存了运行时 电源管理的 所有元素的目录。 subsystem 是指向总线 或类中拥有的子系统的 符号链接。 uevent 保留 udev 事件的记录。 驱动程序目录 具有以下文件: 一个或多个 devices 条目, 它们是指向与此驱动程序 绑定的设备的符号链接。 bind 或 unbind 条目用于将设备 绑定到此驱动 程序或解除绑定。 要启用 sysfs,我们 需要设置 sysfs 内核配置 选项。 Processor SDK Linux 已默认将其启用。 我们需要将 sysfs 安装到文件系统中, 通常是在 /sys 文件夹下。 这在 Processor SDK 文件系统中已自动 完成。 这一列表显示了 USB 在 sysfs 中的描述方式。 条目 1 是 USB 平台设备列表。 条目 2 是平台 总线中的 USB 设备引用。 条目 3 列出了所有 平台 USB 驱动程序。 条目 4 是非平台 USB 设备引用。 条目 5 列出了所有的 非平台 USB 驱动程序。 这五个条目适合 我们刚刚解释的 设备和驱动程序结构。 条目 6 具有 USB 内核 可加载模块,也就是 ko 文件。 条目 7 为 class/udc, 它当 USB 模块在设备 模式下工作时非常有用。 本视频中稍后 会详细介绍这一条目。 条目 8 是 USB 的内核 debugfs -- 同样会在后面 进行详细介绍。 这里列出了 AM335X 上的所有 平台 USB 设备, 包括 CPPI DMA 控制器、 USB PHY 和 MUSB 控制器。 注意 MUSB 控制器是 平台胶合设备的子设备。 这里列出了 AM57x 上的所有 平台 USB 设备, 包括 DWC3 控制器、 xHCI 控制器和 USB PHY。 请注意,xHCI 控制器是 DWC3 控制器设备的子设备。 这个表格显示了 AM335x 上的平台 USB 设备和 USB 驱动程序之间的关系。 这个表格显示了 AM57x 上的平台 USB 设备和 USB 驱动程序之间的关系。 这个表格显示了 非平台 USB 设备和 USB 驱动程序之间的关系。 枚举的 USB 设备的信息 会列在此处, devices 文件夹下。 当枚举新的 USB 设备时, 系统将在 devices 文件夹下创建更多设备条目。 在大多数情况下, 不必到此设备文件夹下 查看 USB 设备信息。 只需使用 lsusb 命令 即可获取这些信息。 -d 选项会以 USB 树的 格式显示这些信息, 而 -v 选项则会列出 USB 设备 描述符。 当 USB 控制器在 设备模式下工作时, 必须加载 USB 引导的驱动程序。 这个 sysfs udc uevent 条目可用于 确定是否已加载 引导的驱动程序, 如果是,则是哪一个。 例如,在将 USB 引导的驱动 程序加载到 AM335x 上之前, 当我们对 UDC uevent 条目 执行 cat 命令时,只能得到 一行信息,即 UDC 名称。 在加载 ether 小工具驱动程序后, 它也具有 UDC uevent 条目。 现在得到三行信息。 这表明已经加载了 以太网引导的驱动程序。 现在我们来看看 debugfs 中的 USB。 对于 MUSB,它是在 /sys/kernel/debug/musb.0 或 1 下, 具体取决于您 查看哪个控制器。 目前,对于内核 4.4 而言,共有三个条目。 regdump 条目用于 收集 MUSB 寄存器转储。 softconnect 条目用于 对主机模式下的 MUSB 进行 USB 设备 连接/分离仿真。 Testmode 条目 用于将控制器 设置为测试模式。 对于 DWC3,debugfs 条目在 /sys/kernel/debug/*.usb 下, 具体取决于您 查看哪个控制器。 目前,对于内核 4.4 而言,共有四个条目。 Link_state 条目显示 USB 3.0 链接状态。 Mode 条目显示 USB 控制器当前 所处的工作模式, 即主机或设备模式。 regdump 条目用于 获取 DWC3 寄存器转储。 Testmode 条目用于 将控制器设置为测试模式。 以上就是本视频的全部内容。 如需更多信息, 请访问此处的这些链接。 如果您有任何问题, 请在 TI E2E 论坛上发布。 谢谢观看。

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

系列的第四个视频。

根据前两个 视频中的一个视频,

我们可以为使用 任何 Sitara 器件的平台

配置相应的 USB 模块。

现在我们可以 加载 Linux,

而且 USB 可随时使用。

此时,我们可以通过许多 方法在 Linux 中验证 USB。

其中一种便是 Linux sysfs。

在本视频中,我将 解释我们可以使用

Linux sysfs 检查 USB 的哪些方面。

我们首先概括 介绍一下 sysfs,

然后解释 sysfs 中的 设备和驱动程序结构。

在进一步了解 sysfs 路由器后,

我们将会学习 如何在 sysfs 中

获取有关 MUSB 或 DWC3 运行时的更多信息。

首先,什么是 sysfs?

Sysfs 是 Linux 中 基于 RAM 的虚拟

文件系统,可将 内核数据结构、属性

以及二者之间的 关系等内核内部

信息导出到用户空间。

在 sysfs 中,内核数据 结构以目录形式呈现。

数据结构的属性

呈现为常规文件, 它们之间的关系则

呈现为符号链接。

通常,sysfs 会 安装在 /sys 目录下。

请看右侧的示例。

它显示了目录 /sys/devices/soc0 下的所有文件。

第一项, power,是一个目录,

代表内核数据结构。

下面几项是常规文件,

代表 soc0 器件的属性。

最后一项, subsystem,是一个符号链接,

指示 soc0 器件属于 soc 总线。

这里是内核 4.9 sysfs 第一层的所有

目录。

每个目录都 保存着有关 sysfs 中

某个类别的信息。

其中有些很容易理解。

例如,firmware 目录具有设备树

信息。

fs 目录描述了 启用的文件系统。

module 目录描述了 内存中加载的所有 .ko 模块。

但 sysfs 中有一件 事情会比较令人困惑。

那就是 sysfs 如何描述设备

信息以及与设备 相关的驱动程序。

您可以看到这里有 一个称作 devices 的目录。

但在 sysfs 中, 似乎到处都在

通过符号链接 引用 devices 目录下的

信息。

在接下来的几张 幻灯片中,我将会

尝试解释 sysfs 如何 描述设备和相关的

驱动程序。

希望能为您解惑,以便

了解如何使用 sysfs 来验证运行时下的 USB。

关于设备和驱动程序,

sysfs 描述两种类型的 内核数据结构 --

设备和驱动程序。

设备描述为 /sys /devices 下的一个目录,

它保存该设备的所有属性。

驱动程序则描述为

/sys/bus/directory/drivers 之下的一个目录,它保存

该驱动程序的属性。

如图中深蓝色方框所示。

sysfs 中的其余信息

都是对设备 目录和驱动程序

目录的引用,

在图中仅显示为实线箭头。

在了解 sysfs 中的 设备和驱动程序结构后,

您便可以自如地 在 sysfs 中的这些

符号链接之间进行导航。

为更好地了解 sysfs 中的 这一设备和驱动程序结构,

我们可以通过 一个示例来看看

如何在 sysfs 中定义和 引用 AM335x RTC 设备。

我们使用此命令来 在 sysfs 中搜索 RTC 节点

并调用结果。

第一个在 /sys/devices/platform 下,

这是该 RTC 设备的定义。

该目录保存了 该器件的所有属性。

第二个是在 platform 总线下对它的引用。

第三个是在 omap_rtc 这一相关驱动程序下

对它的引用。

最后一个与设备 驱动程序结构无关。

它只是对 debugfs 中的

pinctrl 接口名称的重用。

让我们来看看 设备目录的内容。

每个目录都有 这些文件或子目录。

driver 是指向此设备的 驱动程序的符号链接。

of_node 是指向 此设备的设备树

节点的符号链接。

power 是一个 保存了运行时

电源管理的 所有元素的目录。

subsystem 是指向总线 或类中拥有的子系统的

符号链接。

uevent 保留 udev 事件的记录。

驱动程序目录 具有以下文件:

一个或多个 devices 条目, 它们是指向与此驱动程序

绑定的设备的符号链接。

bind 或 unbind 条目用于将设备

绑定到此驱动 程序或解除绑定。

要启用 sysfs,我们 需要设置 sysfs 内核配置

选项。

Processor SDK Linux 已默认将其启用。

我们需要将 sysfs 安装到文件系统中,

通常是在 /sys 文件夹下。

这在 Processor SDK 文件系统中已自动

完成。

这一列表显示了 USB 在 sysfs 中的描述方式。

条目 1 是 USB 平台设备列表。

条目 2 是平台 总线中的 USB 设备引用。

条目 3 列出了所有 平台 USB 驱动程序。

条目 4 是非平台 USB 设备引用。

条目 5 列出了所有的 非平台 USB 驱动程序。

这五个条目适合 我们刚刚解释的

设备和驱动程序结构。

条目 6 具有 USB 内核 可加载模块,也就是

ko 文件。

条目 7 为 class/udc,

它当 USB 模块在设备 模式下工作时非常有用。

本视频中稍后 会详细介绍这一条目。

条目 8 是 USB 的内核 debugfs --

同样会在后面 进行详细介绍。

这里列出了 AM335X 上的所有

平台 USB 设备, 包括 CPPI DMA 控制器、

USB PHY 和 MUSB 控制器。

注意 MUSB 控制器是

平台胶合设备的子设备。

这里列出了 AM57x 上的所有

平台 USB 设备, 包括 DWC3 控制器、

xHCI 控制器和 USB PHY。

请注意,xHCI 控制器是

DWC3 控制器设备的子设备。

这个表格显示了 AM335x 上的平台

USB 设备和 USB 驱动程序之间的关系。

这个表格显示了 AM57x 上的平台

USB 设备和 USB 驱动程序之间的关系。

这个表格显示了

非平台 USB 设备和 USB 驱动程序之间的关系。

枚举的 USB 设备的信息

会列在此处, devices 文件夹下。

当枚举新的 USB 设备时,

系统将在 devices 文件夹下创建更多设备条目。

在大多数情况下, 不必到此设备文件夹下

查看 USB 设备信息。

只需使用 lsusb 命令 即可获取这些信息。

-d 选项会以 USB 树的

格式显示这些信息, 而 -v 选项则会列出 USB 设备

描述符。

当 USB 控制器在 设备模式下工作时,

必须加载 USB 引导的驱动程序。

这个 sysfs udc uevent 条目可用于

确定是否已加载 引导的驱动程序,

如果是,则是哪一个。

例如,在将 USB 引导的驱动 程序加载到 AM335x 上之前,

当我们对 UDC uevent 条目 执行 cat 命令时,只能得到

一行信息,即 UDC 名称。

在加载 ether 小工具驱动程序后,

它也具有 UDC uevent 条目。

现在得到三行信息。

这表明已经加载了 以太网引导的驱动程序。

现在我们来看看 debugfs 中的 USB。

对于 MUSB,它是在 /sys/kernel/debug/musb.0 或 1 下,

具体取决于您 查看哪个控制器。

目前,对于内核 4.4 而言,共有三个条目。

regdump 条目用于 收集 MUSB 寄存器转储。

softconnect 条目用于 对主机模式下的 MUSB

进行 USB 设备 连接/分离仿真。

Testmode 条目 用于将控制器

设置为测试模式。

对于 DWC3,debugfs 条目在 /sys/kernel/debug/*.usb 下,

具体取决于您 查看哪个控制器。

目前,对于内核 4.4 而言,共有四个条目。

Link_state 条目显示 USB 3.0 链接状态。

Mode 条目显示 USB 控制器当前

所处的工作模式, 即主机或设备模式。

regdump 条目用于 获取 DWC3 寄存器转储。

Testmode 条目用于 将控制器设置为测试模式。

以上就是本视频的全部内容。

如需更多信息, 请访问此处的这些链接。

如果您有任何问题, 请在 TI E2E 论坛上发布。

谢谢观看。

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

视频简介

4 在 Linux sysfs 中验证 USB

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

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

TI培训小程序