在Mac OS X中创建虚拟USB设备

4

我试图以编程方式在Mac OS中添加带有驱动程序的虚拟USB设备。 IOKit文档指出:传统上,虚拟设备的驱动程序基于IOResources匹配,因为虚拟设备不会发布自己的nub。这样的驱动程序的另一个示例是HelloIOKit KEXT(在“使用Xcode创建设备驱动程序”中描述),它基于IOResources匹配,因为它不控制任何硬件。

但我没有找到在系统中添加虚拟设备的方法。我该怎么做?


umockdev是Linux平台上的USB模拟应用程序:https://dev59.com/rknSa4cB1Zd3GeqPMDlO#43917529 - Abdullah Farweez
你是否曾经成功地做到了自己想要的事情?或者将其发布在某个地方?无论如何,这个项目可能会为你提供一个起点:https://github.com/unbit/foohid - Marco Luglio
1个回答

7

您实际想做什么?

如果您想创建一个虚拟USB设备,那么您还需要创建一个虚拟USB控制器(IOUSBController/IOUSBControllerV2/IOUSBControllerV3子类),虚拟USB设备将连接到该控制器上。控制器本身需要在 IOResources 上匹配,并且必须模拟真实 USB 控制器的功能。虚拟控制器会假装在其“总线”上检测到虚拟 USB 设备,并提供设备/接口 nub 以供真实 USB 设备驱动程序匹配。这可能需要大量工作 - 您确定您的虚拟设备必须是USB设备吗?


谢谢您的留言。我是出于教育目的在做这个。您能否提供任何虚拟USB控制器的样例? - Rofov Ivan
抱歉,我自己没有看到过这样的代码 - 我知道一些人在StackOverflow上曾经提到过这种事情。我不知道他们是否曾经发布过那段代码。从头开始自己做并不是不可能的,但可能需要写相当多的代码。 - pmdj
我也很想看看一些示例代码。如果我有的话,可能会发布一些示例。 - Marius Karnauskas
@MariusKarnauskas请注意,我的回答是来自2013年。自那以后,macOS发生了很多变化。 IOUSBFamily已经过时,而IOUSBHostFamily kext仅在使用某些没有DriverKit等效项的API时才在特殊情况下起作用。我不知道最近的macOS版本中是否有任何成功的虚拟usb实现。 - pmdj
没错。没有意识到这是一篇如此陈旧的帖子。是的,关于第三方kext支持已经有了一些变化。我有一个愚蠢的想法,就是(以某种方式)将T2公开/访问为U2F虚拟设备。我不知道它是否真的可能,或者有更好的方法来实现。 - Marius Karnauskas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接