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

基于 Arm 的处理器

最新课程

热门课程

6 在设备模式下使用 USB

这是“使用 Linux 的 Sitara 器件 USB 系统设计” 系列的第六个视频。 在本视频中,我将会介绍 如何使用 USB 设备模式, 如何使用 Linux 内核中 提供的那些 USB 小工具 功能。 我们将概述 USB 设备模式, 了解 Linux 内核提供的 USB 小工具功能, 并学习如何使用 这些小工具功能。 最后,我将会 展示如何使用 sysfs UDC 条目 来检查是否已正确 加载 USB 小工具功能。 USB 设备模式 是将 USB 接口 作为 USB 设备来 连接 USB 主机端口。 在这种情况下, Linux/内核会基于 USB 规范中的 定义实施 USB 设备固件。 USB 设备分为两种类型: 集线器和功能设备。 在本视频中,我们将 主要介绍 USB 功能设备。 Linux/内核提供了 许多 USB 功能, 例如以太网、串行、 打印机、音频、视频、 大容量存储、 HID 以及具有 多个上述单一功能 实例的复合设备。 我们设计了一个将会使用 USB 设备模式的 Linux 系统。 我们应该已经知道 需要哪种 USB 小工具功能。 在 Linux/内核 启动后,我们 需要配置 Linux 来加载相应的 USB 小工具驱动程序。 加载 USB 驱动程序的 方法有两种:传统方法和 通过 USB configfs。 传统方法看起来很熟悉, 它使用 modprobe 命令加载小工具驱动 程序 .ko 文件。 它适用于 单功能小工具, 如以太网、大容量存储、 串行、打印机和音频。 但这种方法无法创建 具有多个 USB 功能的 USB 小工具。 为了突破这种局限, 内核通过 USB configfs 提供另外一种创建 USB 小工具的方法。 该方法适用于 所有小工具, 而且特别适用于 网络摄像头、HID 和 复合小工具。 接下来,我将展示 如何使用这两种方法。 传统方法很简单。 假定已在内核中启用了 相应的小工具驱动程序, 只需使用 modprobe 命令 加载该小工具驱动程序即可。 此示例展示了如何 加载以太网小工具。 在加载到小工具驱动程序 并将 USB 小工具连接到 USB 主机端口之后, 小工具 UART 控制台 应该打印此消息, 告知用户在 USB 主机上 枚举了相应的小工具。 现在,小工具和 主机端都创建了一个 USB0 网络接口, 可供相互通信。 这个示例展示了 如何使用传统方法 将 mmcblock0p1 的 大容量存储小工具 加载为备份存储。 这个示例展示了 如何使用传统方法 加载串行小工具。 这会在小工具端 创建 /dev/ttyGS0 设备模式。 在 USB 主机上 进行枚举之后, 主机端会创建 /dev/ttyACM0 设备节点。 这两个设备节点 可以相互进行通信。 这个示例展示了 如何使用传统方法 加载打印机小工具。 这会在小工具端创建 /dev/g_printer0 设备节点。 在 USB 主机上 进行枚举之后, 主机端会创建 /dev/usb/lp0 设备节点。 这两个设备节点 可以相互进行通信。 这个示例展示了 如何使用传统方法 加载音频小工具。 它在小工具端 创建音频输入 和输出设备。 在 USB 主机上 枚举该小工具后, 主机端也会 创建音频输入和 输出设备。 现在,小工具和主机 都可以相互进行通信。 我们看看第二种方法, 即 USB 小工具 configfs。 USB 小工具 configfs 是一个用于创建 USB 小工具的 sysfs 条目, 可用于 Linux/内核中 提供的所有小工具 功能。 这种方法有两个好处。 首先,它使得自定义 单一 USB 功能变得 更加简单。 例如,HID 或 网络摄像头小工具。 HID 具有 多种设备类型, 每种类型具有 不同的数据协议。 因此,在传统 方法中,需要 对 HID 驱动程序 进行修改,以自定义 设备类型和报告描述符。 传统的网络摄像头 小工具具有类似的问题。 必须对视频 参数进行自定义, 例如,分辨率 和帧速率。 但是使用小工具 configfs 时,自定义 HID 或 网络摄像头小工具会非常简单。 这些参数不过 是一些 sysfs 条目。 另一个好处是, 它使创建复合小工具 变得更加容易。 例如,我们需要 创建一个具有八个 串行功能的 USB 小工具。 内核没有这样的 小工具驱动程序。 内核的串行 小工具驱动程序 只有一个串行功能。 因此,如果 使用传统方法, 我们必须新建一个 具有八个串行功能的 小工具驱动程序。 但在使用小工具 configfs 时,可以 通过操纵 sysfs 条目轻松完成。 我们已经介绍了 复合小工具。 但在学习如何使用 USB 小工具 configfs 之前, 我们必须了解 USB 设备与 USB 功能设备 之间的关系。 此图表展示了这种关系。 此图示中的设备 是指 USB 软件狗, 即一种物理设备。 一个设备可能有 一个或多个配置。 在本视频中,我们 可以忽略配置是什么。 每个配置可能对应 一个或多个 USB 功能设备。 我们将具有多个功能的 设备称为复合工具。 我们首先来看一下 USB 小工具 configfs 的 sysfs 结构。 它通常位于 /sys/kernel/config/usb_gadget 下。 除了 vid 和 pid 等这些 有关设备信息的 sysfs 条目, configfs 下的 小工具还具有 有关配置和 功能的条目。 在 configfs 中创建 我们的小工具时, 第 1 步是要 创建小工具条目。 我们通常称之为 g1。 第 2 步是填写有关设备 信息的此类小工具条目, 如 vid、pid 和序列号。 第 3 步是要 创建配置条目。 我们通常称之为 c1。 第 4 步是填写 这些配置信息 条目。 第 5 步是创建 USB 功能条目。 第 6 步是在 USB 配置下创建 USB 功能 条目的符号链接, 在本例中是 c1。 第 7 步是最后一步, 就是将此小工具绑定至 UDC 控制器条目。 这是使用 configfs 创建 串行小工具的示例脚本。 它基本上遵循 前一张幻灯片中 描述的七个步骤。 这里提供了内核 文档中有关 USB 小工具 configfs 的更多信息。 让我们回顾 一遍基本步骤: 要使用 USB 小工具 configfs, 首先须在内核 配置中启用它, 然后将 configfs 安装到根文件系统。 这里提供了有关 如何进行操作的信息。 幸运的是,Processor SDK Linux 中已经完成了 这些工作。 前面我们提到 HID 小工具需要 对设备类型和 HID 报告描述符 进行自定义。 在小工具 configfs 中, 该操作也可以在这些 sysfs 条目和 HID 功能条目中完成。 HID 规范中 定义了确切的值。 要在 configfs 中自定义 网络摄像头小工具, 需在 uvc 功能条目下 使用这些 sysfs 条目。 请参阅 uvc 规范, 了解如何使用这些条目。 截至目前,我们学习了如何 加载 USB 小工具驱动程序。 但如何检查小工具是否 正在使用或可供 USB 主机枚举? 我们可以使用 sysfs 中的 UDC 条目来进行此项检查。 当 USB 模块配置为在 DRD 或设备模式下工作时, 在启动内核并加载 USB 控制器驱动程序之后, /sys/class/udc 下 应该有一个条目。 该条目名称可能因 Sitara 器件不同而 不同。 如果在这个位置 没有获得任何条目, 则意味着没有 正确加载或配置 USB 控制器驱动程序。 此时无法使用 USB 设备模式。 我们还可以在 UDC 项下使用 uevent 条目, 来检查是否加载了 USB 小工具驱动程序。 例如,这些命令的输出 显示加载小工具 驱动程序之前的状态。 在加载以太网 小工具驱动程序之后, uevent 条目显示已 加载 g_ether 驱动程序。 在小工具连接到 USB 主机并得到枚举之后, 状态条目显示 已配置小工具。 以上就是本视频的全部内容。 如需更多信息, 请访问此处的这些链接。 如果您有任何问题, 请在 TI E2E 论坛上发布。 谢谢观看。

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

系列的第六个视频。

在本视频中,我将会介绍 如何使用 USB 设备模式,

如何使用 Linux 内核中 提供的那些 USB 小工具

功能。

我们将概述 USB 设备模式,

了解 Linux 内核提供的 USB

小工具功能,

并学习如何使用 这些小工具功能。

最后,我将会 展示如何使用

sysfs UDC 条目 来检查是否已正确

加载 USB 小工具功能。

USB 设备模式 是将 USB 接口

作为 USB 设备来 连接 USB 主机端口。

在这种情况下, Linux/内核会基于

USB 规范中的 定义实施 USB

设备固件。

USB 设备分为两种类型:

集线器和功能设备。

在本视频中,我们将 主要介绍 USB 功能设备。

Linux/内核提供了 许多 USB 功能,

例如以太网、串行、 打印机、音频、视频、

大容量存储、 HID 以及具有

多个上述单一功能 实例的复合设备。

我们设计了一个将会使用 USB 设备模式的 Linux 系统。

我们应该已经知道 需要哪种 USB 小工具功能。

在 Linux/内核 启动后,我们

需要配置 Linux 来加载相应的 USB

小工具驱动程序。

加载 USB 驱动程序的 方法有两种:传统方法和

通过 USB configfs。

传统方法看起来很熟悉,

它使用 modprobe 命令加载小工具驱动

程序 .ko 文件。

它适用于 单功能小工具,

如以太网、大容量存储、 串行、打印机和音频。

但这种方法无法创建 具有多个 USB 功能的

USB 小工具。

为了突破这种局限, 内核通过 USB configfs

提供另外一种创建 USB 小工具的方法。

该方法适用于 所有小工具,

而且特别适用于 网络摄像头、HID 和

复合小工具。

接下来,我将展示 如何使用这两种方法。

传统方法很简单。

假定已在内核中启用了 相应的小工具驱动程序,

只需使用 modprobe 命令 加载该小工具驱动程序即可。

此示例展示了如何 加载以太网小工具。

在加载到小工具驱动程序 并将 USB 小工具连接到

USB 主机端口之后, 小工具 UART 控制台

应该打印此消息, 告知用户在 USB 主机上

枚举了相应的小工具。

现在,小工具和 主机端都创建了一个

USB0 网络接口, 可供相互通信。

这个示例展示了 如何使用传统方法

将 mmcblock0p1 的 大容量存储小工具

加载为备份存储。

这个示例展示了 如何使用传统方法

加载串行小工具。

这会在小工具端 创建 /dev/ttyGS0

设备模式。

在 USB 主机上 进行枚举之后,

主机端会创建 /dev/ttyACM0 设备节点。

这两个设备节点 可以相互进行通信。

这个示例展示了 如何使用传统方法

加载打印机小工具。

这会在小工具端创建 /dev/g_printer0 设备节点。

在 USB 主机上 进行枚举之后,

主机端会创建 /dev/usb/lp0 设备节点。

这两个设备节点 可以相互进行通信。

这个示例展示了 如何使用传统方法

加载音频小工具。

它在小工具端 创建音频输入

和输出设备。

在 USB 主机上 枚举该小工具后,

主机端也会 创建音频输入和

输出设备。

现在,小工具和主机 都可以相互进行通信。

我们看看第二种方法, 即 USB 小工具 configfs。

USB 小工具 configfs 是一个用于创建 USB

小工具的 sysfs 条目,

可用于 Linux/内核中 提供的所有小工具

功能。

这种方法有两个好处。

首先,它使得自定义 单一 USB 功能变得

更加简单。

例如,HID 或 网络摄像头小工具。

HID 具有 多种设备类型,

每种类型具有 不同的数据协议。

因此,在传统 方法中,需要

对 HID 驱动程序 进行修改,以自定义

设备类型和报告描述符。

传统的网络摄像头 小工具具有类似的问题。

必须对视频 参数进行自定义,

例如,分辨率 和帧速率。

但是使用小工具 configfs 时,自定义 HID 或

网络摄像头小工具会非常简单。

这些参数不过 是一些 sysfs 条目。

另一个好处是, 它使创建复合小工具

变得更加容易。

例如,我们需要 创建一个具有八个

串行功能的 USB 小工具。

内核没有这样的 小工具驱动程序。

内核的串行 小工具驱动程序

只有一个串行功能。

因此,如果 使用传统方法,

我们必须新建一个 具有八个串行功能的

小工具驱动程序。

但在使用小工具 configfs 时,可以

通过操纵 sysfs 条目轻松完成。

我们已经介绍了 复合小工具。

但在学习如何使用 USB 小工具 configfs 之前,

我们必须了解 USB 设备与 USB 功能设备

之间的关系。

此图表展示了这种关系。

此图示中的设备 是指 USB 软件狗,

即一种物理设备。

一个设备可能有 一个或多个配置。

在本视频中,我们 可以忽略配置是什么。

每个配置可能对应 一个或多个 USB 功能设备。

我们将具有多个功能的

设备称为复合工具。

我们首先来看一下 USB 小工具 configfs 的

sysfs 结构。

它通常位于 /sys/kernel/config/usb_gadget 下。

除了 vid 和 pid 等这些 有关设备信息的 sysfs 条目,

configfs 下的 小工具还具有

有关配置和 功能的条目。

在 configfs 中创建 我们的小工具时,

第 1 步是要 创建小工具条目。

我们通常称之为 g1。

第 2 步是填写有关设备 信息的此类小工具条目,

如 vid、pid 和序列号。

第 3 步是要 创建配置条目。

我们通常称之为 c1。

第 4 步是填写 这些配置信息

条目。

第 5 步是创建 USB 功能条目。

第 6 步是在 USB 配置下创建 USB 功能

条目的符号链接,

在本例中是 c1。

第 7 步是最后一步, 就是将此小工具绑定至

UDC 控制器条目。

这是使用 configfs 创建 串行小工具的示例脚本。

它基本上遵循 前一张幻灯片中

描述的七个步骤。

这里提供了内核 文档中有关 USB

小工具 configfs 的更多信息。

让我们回顾 一遍基本步骤:

要使用 USB 小工具 configfs,

首先须在内核 配置中启用它,

然后将 configfs 安装到根文件系统。

这里提供了有关 如何进行操作的信息。

幸运的是,Processor SDK Linux 中已经完成了

这些工作。

前面我们提到 HID 小工具需要

对设备类型和 HID 报告描述符

进行自定义。

在小工具 configfs 中,

该操作也可以在这些 sysfs 条目和 HID 功能条目中完成。

HID 规范中 定义了确切的值。

要在 configfs 中自定义 网络摄像头小工具,

需在 uvc 功能条目下 使用这些 sysfs 条目。

请参阅 uvc 规范,

了解如何使用这些条目。

截至目前,我们学习了如何 加载 USB 小工具驱动程序。

但如何检查小工具是否

正在使用或可供 USB 主机枚举?

我们可以使用 sysfs 中的 UDC 条目来进行此项检查。

当 USB 模块配置为在 DRD 或设备模式下工作时,

在启动内核并加载 USB 控制器驱动程序之后,

/sys/class/udc 下 应该有一个条目。

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

不同。

如果在这个位置 没有获得任何条目,

则意味着没有 正确加载或配置

USB 控制器驱动程序。

此时无法使用 USB 设备模式。

我们还可以在 UDC 项下使用 uevent 条目,

来检查是否加载了 USB 小工具驱动程序。

例如,这些命令的输出

显示加载小工具 驱动程序之前的状态。

在加载以太网 小工具驱动程序之后,

uevent 条目显示已 加载 g_ether 驱动程序。

在小工具连接到 USB 主机并得到枚举之后,

状态条目显示 已配置小工具。

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

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

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

谢谢观看。

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

视频简介

6 在设备模式下使用 USB

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

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

TI培训小程序