所以...
有些虚拟机基本上在某些模拟环境中运行操作系统(可能与当前存在的真实硬件相对应,也可能不对应)。可以将真实硬件设备(例如 USB 驱动器)连接到虚拟机。
然后有一些所谓的“虚拟 USB 设备”(例如 Arduino Leonardo),它们可以被编程为像实际 USB 设备一样响应,但基本上只是 USB 电缆另一端运行某些程序的微芯片(它们可能会或可能不会连接到其他组件,对于这个问题,我们假设它们没有)。
当然,可以将虚拟 USB 设备连接到 VM(因为它们是真实的硬件)。
是否有可能跳过硬件部分并在连接到虚拟机的主机操作系统上运行自定义程序,就好像它是一个真实的硬件设备一样(比如,作为虚拟化软件的插件,或者使用某些 API 的独立程序)?
如果有,是否有现成的解决方案可供进一步参考?
如果没有,为什么虚拟机不提供此功能(例如是否存在一些硬件限制)?
答案1
简短回答:是的。
事实上,这完全依赖于 Hypervisor。
所有虚拟硬件均由 Hypervisor 提供给虚拟机。如果 Hypervisor 支持插件以及通过这些插件添加虚拟硬件,那么您可以通过这种方式将虚拟硬件添加到您的环境中。
就我个人经验而言,VMware 的 ESXi 支持这一点。你可以从 Cisco 下载并安装虚拟网络设备(如交换机),我相信我还记得该产品中还有其他专用硬件,尽管我已经有几年没有管理过 VMware 虚拟堆栈了。
我不知道是否有其他虚拟机管理程序支持此功能,但我猜测微软的 HyperV 可能也支持此功能,因为他们尽可能地保持与 VMware 的功能相同。
我建议研究一下 VMware 的各种 API,作为一个好的起点。
如果您决定使用某个虚拟机管理程序,则需要仔细阅读该系统的文档并确定它们是否具有类似的功能。每个虚拟机管理程序都不同,为一个虚拟机管理程序编写的软件如果不进行大量修改,不太可能在另一个虚拟机管理程序中运行。