# 28.1.概述

本章介绍了在 FreeBSD 中使用 USB 设备模式和 USB OTG（USB On The Go）。这包括虚拟串行控制台、虚拟网络接口和虚拟 USB 驱动器。

在支持 USB 设备模式或 USB OTG 的硬件上运行时，FreeBSD USB 栈可以处于 **设备模式**。设备模式使计算机能够作为不同类型的 USB 设备类进行展示，包括串行端口、网络适配器和大容量存储设备，或者它们的组合。像笔记本电脑或台式计算机这样的 USB 主机能够像访问物理 USB 设备一样访问这些虚拟设备。设备模式有时也被称为“USB 小工具模式”（USB gadget mode）。

硬件可以通过两种基本方式提供设备模式功能：一种是有一个单独的“客户端端口”，仅支持设备模式；另一种是使用 USB OTG 端口，支持设备模式和主机模式。对于 USB OTG 端口，USB 栈会根据连接到端口的设备自动切换主机模式和设备模式。将像 U 盘这样的 USB 设备连接到端口时，FreeBSD 会切换到主机模式；将像计算机这样的 USB 主机连接到端口时，FreeBSD 会切换到设备模式。单用途的“客户端端口”始终工作在设备模式。

FreeBSD 向 USB 主机展示的内容取决于 `hw.usb.template` sysctl。一些模板提供单个设备，比如串行终端；其他模板提供多个设备，它们可以同时使用。例如，模板 10 提供了一个大容量存储设备、一个串行控制台和一个网络接口。有关可用值的列表，请参阅 [usb\_template(4)](https://man.freebsd.org/cgi/man.cgi?query=usb_template\&sektion=4\&format=html)。

需要注意的是，在某些情况下，根据硬件和主机操作系统的不同，要使主机注意到配置的变化，必须物理断开并重新连接，或以系统特定的方式强制重新扫描 USB 总线。当 FreeBSD 在主机上运行时，可以使用 [usbconfig(8)](https://man.freebsd.org/cgi/man.cgi?query=usbconfig\&sektion=8\&format=html) 中的 `reset` 命令。这也必须在加载 **usb\_template.ko** 后执行，特别是在 USB 主机已经连接到 USB OTG 插口时。

阅读本章后，你将了解：

* 如何在 FreeBSD 上设置 USB 设备模式功能。
* 如何配置 FreeBSD 上的虚拟串行端口。
* 如何从各种操作系统连接到虚拟串行端口。
* 如何配置 FreeBSD 提供虚拟 USB 网络接口。
* 如何配置 FreeBSD 提供虚拟 USB 存储设备。
