Mac-虚拟串行端口

Sta*_*ful 4 macos serial-port iokit

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

该应用程序的要点:

  • 创建一个虚拟串行端口(在/ dev中列出并在IOKit注册表中注册)
  • 启动与另一台计算机的TCP连接
  • 将虚拟串行端口上收到的所有内容代理到网络,反之亦然。

与计算机上的串行端口通信的第三方应用程序将使用此应用程序,从而可以在网络上定位特定的串行设备。可可和网络部分没问题,我已经编写了一些通过网络交谈的应用程序。我的挂断是串行端口。

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

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

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

感谢您提供的任何帮助,
有状态

pmd*_*mdj 5

首先,您是否检查过是否可以从此应用程序借用解决方案从网站上还不清楚他们是否设法将其虚拟串行端口完全集成到系统中。

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

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

万一您必须在内核中完成所有操作:

至少,虚拟驱动程序本身不应做太多工作,尽管它需要一些时间来加快内核开发的速度。不幸的是,有关串行端口驱动程序的文档非常少-关键是IOSerialDriverSync抽象类的子类化。我所看到的唯一描述是在Ole Henry Halvorsen的OSX和iOS内核编程书中。它还提供了一个有关读写操作示例的片段。(披露:我是本书的技术审阅者之一;我没有动力推荐它-在这种情况下,它实际上是我所知道的唯一文档。)您可以在Apple的计算机中找到完整的串行端口驱动程序的来源。USBCDC司机AppleUSBCDCDMM 是实际代表串行端口节点的类。

内核中打开一个所谓的“内核控制”套接字相对简单,此处记录了各个API ;从用户空间使用常规BSD套接字send/ recvAPI。(这在前面的书中也有介绍)。然后,您的守护程序可以连接到该守护程序,而您所要做的就是在套接字和虚拟串行端口设备之间推送数据。您当然需要正确处理断开事件。

不过,我认为这对于有经验的C程序员(使用某些C ++)作为第一个内核项目是可以实现的。

希望对您有所帮助!

  • 很棒的东西,pmjordan。我确实看过您引用的那个应用程序,他们实际上是将socat的编译可执行文件捆绑到他们的应用程序中,然后仅将参数传递给它以执行。而且,它使用的那些串行端口也未在IO Kit注册表中注册。我买了你提到的那本书的副本,那里有很多信息。感谢您的指导! (2认同)
  • tcv,您好,抱歉,没有。我继续进行其他一些项目。我仍然很想解决这个问题。 (2认同)