使计算机充当其他设备的虚拟USB设备


18

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

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

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

Answers:


12

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

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

不幸的是,您必须找到一种将其连接到主板上的方法。从技术上讲,可以做到。实际上,您必须重新设计主板以使其包含在内。您可能很幸运,可以在主板上的某个地方找到一条SPI或I2C总线以允许您添加它,但是通常除非您使用开发板或单板总线,否则它们通常直接连接到所用的任何东西。裸露GPIO和其他端口(例如Raspberry Pi)的台式计算机。

另一个选择是USB On-the-Go控制器。专为嵌入式和便携式设备设计的主板往往具有USB OTG(移动)控制器,可以用作主机或设备控制器。例如,上述的Raspberry Pi具有一个On-the-Go控制器,但在所有型号上,除了Pi Zero外,Pi Zero重新连接到主机端口或板载USB集线器均拒绝使用USB设备功能。BeagleBone Black具有OTG端口。

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

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


2
很棒的解释,如果您(根据您的知识)看到新的句子,直到有人用独家适配器...出现,您可以更新答案吗?在2018年会有配备usb-c的笔记本电脑,这是一个解决方案吗?
Asain Kujovic

8

USB是不对称的:一侧是主机,另一侧是外围设备。您不能使外围设备充当主机,反之亦然。USB端口可以充当任一侧;这被称为USB on-the-go,并且存在于某些手机和平板电脑中。这些端口实际上是设备类型的端口,而不是主机类型的端口。我从未见过具有设备端口的PC。这需要控制器上的电子设备,仅制造一条两端都没有的电缆是不够的。

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

如果要将计算机用作USB存储设备,则可以使用具有USB连接的手机或平板电脑来代替PC。


您能否详细说明一下,使用手机如何帮助我将PC变成USB存储设备/主机,从而可以插入其他计算机,电视或设备?我想,尽管我认为我对USB OTG有一定的了解,但我仍然没有提到这一点。
trejder 2015年

@trejder如我所写,我从未见过带有设备端口的PC(“ x86平板电脑除外”的“ PC”)。
吉尔斯(Gillles)“所以-别再作恶了”

是的,但是我要引用您的最后一句话:“ 如果要将计算机变成USB存储设备,则可以使用带有USB连接的手机或平板电脑 ”。也许我缺少了一些东西,但我理解为“您可以使用手机或平板电脑将计算机变成USB存储设备”。如果是这样,那么问题是:如何?
trejder 2015年

1
@trejder啊,那句话中的“计算机”不是“ PC”,而是“计算机”。电话/平板电脑是与PC不同的计算机。那是什么困扰你?
吉尔斯(Gillles)“所以-别再作恶了”

1
@trejder否。通常最好的选择是以一种或另一种方式建立网络连接。您可以将Firewire用作任意两台具有Firewire端口的PC之间的网络连接,但是许多PC都没有。大多数PC都有一个以太网端口,您可以使用以太网电缆连接两台PC(许多旧PC需要交叉电缆,而现代PC可以使用普通电缆)。要使PC用作移动设备的存储设备,通常需要以某种方式使PC进入wifi。
吉尔斯(Gillles)“所以-别再作恶了”

2

您可以考虑使用特殊的“ USB-USB桥接电缆”之一,有时也称为“ USB网络电缆”。就像这些文章中提到的那样:

它们使您可以在两台PC之间传输文件。十多年前(在Windows XP时代),我一直在使用这类电缆,在那时,市场上所有可用的此类电缆都需要特殊的驱动程序和软件。它们使您只能通过特殊的文件命令程序传输文件,该命令文件与电缆驱动程序一起安装在安装磁盘上,因此不允许一台PC作为纯USB外部设备作用于另一台PC。

我不确定此后是否发生了任何变化,以及新解决方案是否仅允许您使用特殊软件来传输文件,以及-是否可以强制将一台PC用作另一台计算机的外部设备,我不确定。


2

正如Matt Thomson答复中所解释的那样,由于缺少USB从控制器,因此无法正确地使PC计算机的物理USB端口充当USB从设备。

这意味着,如果我们有一个可以提供从属模式USB的适配器板(例如Raspberry Pi Zero),则必须通过另一个通道(例如有线以太网)将其连接到您的主机PC。我有两个不同的建议,您可以在该以太网连接上运行哪种协议:

(1)通过IP网络暴露USB端口。

使用软件将Raspberry Pi Zero的USB从模式端口作为虚拟USB设备公开到您的PC。该USB / IP项目提供了这一点,通过可以在IP网络上传输的USB驱动程序的手段。是一个使用USB / IP向计算机提供模拟USB设备的示例,此处将是您的PC。

在这个提议的解决方案中,我不知道的是,USB / IP软件是否已经能够通过IP网络公开USB从端口,或仅公开USB主机端口。

但是,即使可行,您仍然必须在PC上设置或调整设备驱动程序,使它们(1)接受传入的USB / IP连接作为USB连接,(2)提供USB从属模式而不是USB USB主机模式(3)通过为指定位置(您的.vdi文件)中的数据提供服务来模拟USB大容量存储设备。

总体而言,这是一种复杂的操作方式。

(2)通过IP网络公开文件。

这是使用Raspberry Pi Zero的以太网连接的一种简单得多的方法:在Raspberry Pi Zero上,通过网络文件系统挂载存储在PC上的数据。这些文件然后在逻辑上显示为Pi Zero的文件系统的一部分,您可以将它们与Linux USB小工具驱动程序一起使用,以使Raspberry Pi在连接的设备上看起来像是USB大容量存储设备。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.