让电脑充当其他设备的虚拟USB设备

让电脑充当其他设备的虚拟USB设备

某些应用程序模拟虚拟 USB 或 CD ROM 驱动器,就像 USB 驱动器连接到计算机一样。

是否有任何配置或应用程序提供虚拟 USB 驱动器,不是为操作系统本身,而是为通过 USB 端口接受 USB 驱动器的其他设备提供虚拟 USB 驱动器。

因此,我将在计算机中拥有一个虚拟硬盘(例如文件*.vdi),它通过 USB 插座作为 USB 驱动器连接到某些其他设备(例如手机或笔记本电脑)。

答案1

编辑:虽然这个答案在当时是正确的(除了一些罕见的例外),但从那时起就有了更多的发展。例如,我们现在有 USB-C,它支持设备模式和主机模式。许多设备(尤其是 SBC)都配备了 USB-C 和可以在两种模式下运行的控制器。主要问题仍然主要出现在 Windows PC 端,操作系统缺少任何 USB-C 设备模式驱动程序。然而,Linux包括 USB-C 设备模式驱动程序(又名“USB Gadget”驱动程序 - 尽管您可能需要编译自定义内核(如果它们尚未包含在您的发行版中)。)

您需要向计算机添加 USB 设备/外围控制器,而不是它们通常附带的 USB 主机控制器。

像这样的东西:https://www.maximintegrated.com/en/products/interface/controllers-expanders/MAX3420E.html

不幸的是,您必须找到一种方法将其连接到主板上。从技术上来说,这是可以做到的。实际上,您必须重新设计主板才能包含它。您可能很幸运地发现主板上某处暴露有 SPI 或 I2C 总线,以便您添加它,但它们通常直接连接到它们正在使用的任何地方,除非您使用的是开发板或单板具有外露 GPIO 和其他端口(例如 Raspberry Pi)的板载计算机。

另一种选择是 USB 便携式控制器。专为嵌入式和便携式设备设计的主板往往具有 USB OTG(便携式)控制器,它可以充当主机或设备控制器。例如,前面提到的 Raspberry Pi 有一个 On-the-Go 控制器,但在除 Pi Zero 之外的所有型号上,它都会重新连接到主机端口或板载 USB 集线器,从而拒绝使用 USB 设备功能。 BeagleBone Black 有一个 OTG 端口。

但这还不是全部 - 一旦您拥有了硬件,您还需要软件。 Linux 有一些有用的内核 USB Gadget 驱动程序(“USB gadget”是 USB 外围设备/设备的另一个术语),例如g_serial和 g_ethernet,允许您将设备插入另一台计算机,并作为串行或以太网 USB 设备可见(还有其他一些用于将设备公开为大容量存储,允许您将文件用作块设备并公开计算机作为大容量存储设备)。 BeagleBone Black 往往默认启用此功能,因此您只需通过 USB 将其插入 PC 并将其视为联网设备 - 而且我相信它还可以通过使用复合驱动程序显示为大容量存储设备(这允许它在单个连接上显示为多个 USB 设备类型。) Pi Zero 可以使用这些,但默认情况下不会。对于 Windows 或其他操作系统,您可能必须自己编写该设备驱动程序。

所以,理论上,你可以做到。您可以拆掉您的台式电脑,尝试在主板上的某处找到未使用的兼容总线(很可能是控制器 IC 上的一些未使用的引脚),或者扩展内部 I2C 或 SPI 总线的方法,或者您可以拆下并使用的东西更换 USB OTG 或设备控制器芯片并将其焊接到其上。然后您可以安装 Linux 并使用小工具驱动程序,或者为其他操作系统编写自己的驱动程序。实际上,除非您是一流的电子工程师,否则您将无法做到这一点。至少,直到有人推出了带有设备或 OTG 端口的难以捉摸的适配器,可插入 USB 端口(理论上,这可以通过连接到一对 USB 设备控制器 IC 的 Arduino 等微控制器来完成),并编写驱动程序来运行它。

答案2

我确实希望人们不要再重复这样的错误说法:所有个人电脑都缺乏充当 USB 设备/从属设备/小工具/其他设备的硬件。我可以证明事实并非如此。我的第一个例子是,所有带有 USB-C 端口的 Apple Mac 电脑都能够进入 USB-C 从属模式。这称为“目标磁盘模式”,记录如下: https://support.apple.com/en-us/HT201462

这是一个将你价值 2000 美元的笔记本电脑暂时变成价值 200 美元的 USB-C 驱动器的功能。为什么要这样做?这样就可以在一台无法启动的 Mac 上修复驱动器。这是如何运作的?它之所以有效,是因为 Apple 在其计算机中使用了 USB-C 芯片,该芯片能够充当 USB 从设备/设备/其他设备,并安装了一些固件来实现此功能。该芯片并非苹果电脑独有,许多其他电脑制造商也使用该芯片。

有更多证据表明,大多数配备 USB-C 端口的笔记本电脑还具有充当 USB 从属设备/设备所需的硬件。拿一台使用 USB-C 供电和充电的笔记本电脑,获取 USB-C 转 USB-C,再获取另一台具有 USB-C 端口且运行 Windows 的计算机。现在,使用 USB-C 电缆将笔记本电脑连接到 Windows 计算机,并检查设备管理器中是否有新设备。如果笔记本电脑从 Windows 计算机获取电源,那么您应该会在设备管理器中看到笔记本电脑在设备列表中显示为“USB 广告牌设备”。这是充当 USB 设备的笔记本电脑。它必须显示为支持 USB 供电的主机(例如 USB-C 电源砖)的设备,才能消耗超过 5 瓦的功率。还有其他方法可以检查这一点,因此请根据您喜欢的操作系统或其他系统调整该过程。

为什么没有更多的操作系统发行商使用此功能来做更多的事情而不仅仅是为笔记本电脑的电池充电呢?这是个好问题。这是我长期以来一直想要回答的问题。

有些人致力于扩展 Linux 系统作为 USB 设备的功能。它现在适用于各种 USB 虚拟设备,但设置起来并不简单。我希望有一天此功能能得到更好的支持,并希望用户能够简单、轻松地工作,并具有我们期望 USB 3.x 设备提供的高性能。

硬件已经存在,可以让计算机在大多数带有 USB-C 端口的计算机中充当 USB 设备,我们只需要更多的人致力于编写软件,使普通用户(甚至略高于平均用户)可以设置它起来并使用。

答案3

USB A/B(旧式,两端插头形状不同,且两端只能以一种方式插入)是不对称的:一侧是主机,另一侧是外围设备。您不能让外围设备充当主机,反之亦然。 USB 端口可以充当任一侧;这就是所谓的USB 随身携带并且存在于某些手机和平板电脑上。这些端口是物理设备类型端口,而不是主机类型端口。我从未见过带有设备端口的 PC。这需要控制器上的电子设备,仅仅制作两端都适合的电缆是不够的。

所以不,您无法将 PC 变成 USB 设备。

如果您想使用计算机作为 USB 存储设备,可以使用具有 USB 连接的手机或平板电脑,而不是使用 PC。


USB-C(带有对称插头的新型,两端相同)确实允许将一台计算机插入另一台计算机。不幸的是,它并不像插入电缆并获得点对点网络连接那么简单。看https://superuser.com/questions/1215710/is-it-possible-to-connect-two-pcs-via-usb-c

答案4

从技术上讲,这应该可以实现http://www.bplus.com.tw/Adapter/PP3380-AB.html- PP3380-AB(USB3380-AB 评估板)似乎包含一个 USB3.0 5gbps USB B 端口(位于 pci express 卡上),并且基于 Linux USB Gadget 支持的 PLX USB3380 芯片构建。但它并不便宜(250 美元),而且可能远非微不足道(不包括编程器...)。

(注:还有http://www.bplus.com.tw/Adapter/USB3380EVB.html带有 ADP 板的 USB3380-AB EVK 可为您提供 microUSB 端口 - 但这只是电缆的区别)

相关内容