Macos Mac-虚拟串行端口

Macos Mac-虚拟串行端口,macos,serial-port,iokit,Macos,Serial Port,Iokit,我需要创建一个Cocoa应用程序,该应用程序将创建一个可供其他应用程序使用的虚拟串行端口,这意味着已在IO Kit注册表中注册 应用程序的要点: 创建虚拟串行端口(在/dev中列出并在IOKit注册表中注册) 启动到另一台计算机的tcp连接 将虚拟串行端口上接收到的所有内容代理到 网络,反之亦然 此应用程序将由与计算机上的串行端口通信的第三方应用程序使用,允许通过网络定位特定的串行设备。Cocoa和网络部分没有问题,我已经编写了几个通过网络聊天的应用程序。我的问题是串口 我已经使用socat

我需要创建一个Cocoa应用程序,该应用程序将创建一个可供其他应用程序使用的虚拟串行端口,这意味着已在IO Kit注册表中注册

应用程序的要点:

  • 创建虚拟串行端口(在/dev中列出并在IOKit注册表中注册)
  • 启动到另一台计算机的tcp连接
  • 将虚拟串行端口上接收到的所有内容代理到 网络,反之亦然
此应用程序将由与计算机上的串行端口通信的第三方应用程序使用,允许通过网络定位特定的串行设备。Cocoa和网络部分没有问题,我已经编写了几个通过网络聊天的应用程序。我的问题是串口

我已经使用socat/netcat/minicom进行了测试,以验证它是否可以通过网络代理pty/tty流量,但我使用的tty没有显示为随机应用程序可用,因为它没有在IO Kit注册表中注册

虽然我可以使用pty/tty主/从进行通信,但我需要这个从tty向Mac应用程序显示。非常方便的方法是在IO Kit注册表中注册tty

我真的需要创建一个在Cocoa应用程序运行时注册的自定义IOKit kext驱动程序吗?如果是这样的话,我将面临一个巨大的学习曲线。我应该从哪里开始阅读?或者,我可以使用IOKit创建一个虚拟串行端口,并将其注册为应用程序的可用串行端口,而不必加载任何内核扩展吗

感谢您提供的任何帮助,

有状态的

首先,您是否已检查是否可以从网站借用解决方案?如果他们已设法将其虚拟串行端口完全集成到系统中,这一点并不明显

如果有一种方法可以在用户空间中实现,我不知道。用户空间iokitapi通常不允许创建类实例,更不用说创建新的设备驱动程序类了。也许您可以以其他方式说服Cocoa库找到它,尽管它没有在内核中注册

我不知道是否可以在内核中创建一个“虚拟”串行端口,然后从用户空间守护进程将tty移动到/dev中。也许这是一个选择

如果您必须在内核中完成所有操作:

虚拟驱动程序本身至少不应该太多工作,尽管它需要一些时间来跟上内核开发的速度。不幸的是,对于串行端口驱动程序来说,文档非常少-关键是对
IOSerialDriverSync
抽象类进行子类化。我所看到的唯一描述是Ole Henry Halvorsen的OSX和iOS内核编程书。它还有一个用于读写操作的示例片段。(披露:我是这本书的技术评论员之一;我没有收到任何推荐的奖励-在这种情况下,这是我所知道的唯一的文档)您可以在中找到完整串行端口驱动程序的源,
AppleUSBCDCDMM
是实际代表串行端口节点的类

在内核中打开一个所谓的套接字是相对简单的,各个API是:;从用户空间使用普通BSD套接字
send
/
recv
API。(这在前面提到的书中也有描述)您的守护进程可以连接到该设备,您需要做的就是在套接字和虚拟串行端口设备之间推送数据。当然,您需要正确处理断开连接事件等

尽管如此,我认为对于有经验的C程序员(使用一些C++)来说,作为第一个内核项目,这是可以实现的


我希望这有帮助

好东西,乔丹。我确实看过你引用的那个应用程序,他们实际上是在将socat的编译可执行文件捆绑到他们的应用程序中,然后只是将参数传递给它执行。而且,它使用的那些串行端口也没有在IO Kit注册表中注册。我买了一本你提到的书,里面有很多信息。谢谢你的指点@有状态的你到底做了什么?嗨,tcv,对不起,没有。我转到了其他一些项目。不过我还是很想解决这个问题。