如何在 Linux 中通过 USB 使用目标模式?

如何在 Linux 中通过 USB 使用目标模式?

内核 3.5 引入了:

此版本包含一个使用 IEEE-1394 连接作为 SCSI 传输的驱动程序。这可以将 SCSI 设备暴露给 Firewire 总线上的其他节点,例如硬盘驱动器。它的功能类似于许多 Apple 计算机上的 Firewire 目标磁盘模式。

此版本还添加了一个 usb-gadget 驱动程序,该驱动程序可对 USB 执行相同操作。该驱动程序支持两种 USB 协议,即 BBB 或 BOT(仅批量传输)和 UAS(USB 连接 SCSI)。BOT 在备用接口 0(主)上公布,而 UAS 在备用接口 1 上公布。这两种协议都可以在 USB 2.0 和 USB 3.0 上工作。UAS 利用了 USB 3.0 的流支持功能。

http://kernelnewbies.org/Linux_3.5

我有一个内核为 3.5.3-1 的 Arch Linux,想尝试一下这个功能。

答案1

FireWire 是一种点对点架构,因此将 PC 伪装成硬盘只需要一些软件。

另一方面,USB 严格区分主机(PC)和设备。您的硬件是否可以作为主机或设备运行(或者在 USB-On-The-Go 的情况下两者皆可)取决于您的 USB 接口芯片的设计用途。

Linux 既可以在 PC 上运行,也可以在设备上运行,因此它有适用于这两种 USB 接口的驱动程序。但是,所有“USB Gadget”驱动程序都要求接口芯片支持设备模式,而 PC 内置的控制器均不支持该模式。

运行此代码的唯一机会是使用一些嵌入式设备,例如路由器、NAS 盒或电话。

答案2

从该消息下的代码中,您可以看到补丁。与您相关的是:

--- a/drivers/usb/gadget/Kconfig
+++ b/drivers/usb/gadget/Kconfig
@@ -798,6 +798,16 @@ config USB_MASS_STORAGE
          Say "y" to link the driver statically, or "m" to build
          a dynamically linked module called "g_mass_storage".

+config USB_GADGET_TARGET
+       tristate "USB Gadget Target Fabric Module"
+       depends on TARGET_CORE
+       help
+         This fabric is an USB gadget. Two USB protocols are supported that is
+         BBB or BOT (Bulk Only Transport) and UAS (USB Attached SCSI). BOT is
+         advertised on alternative interface 0 (primary) and UAS is on
+         alternative interface 1. Both protocols can work on USB2.0 and USB3.0.
+         UAS utilizes the USB 3.0 feature called streams support.
+
 config USB_G_SERIAL
        tristate "Serial Gadget (with CDC ACM and CDC OBEX support)"
        help

这说明USB_GADGET_TARGET已添加,如果您在内核中启用此选项并重新编译/重新安装内核,那么您将能够在 Linux 中使用 USB 的目标模式。请注意,您TARGET_CORE也必须启用。

更多信息请访问:

相关内容