3

我正在 Xcode 4 中为 MAC 制作一个应用程序,目的是绘制心电图读数图。读数应该通过 USB/串行接收。因此,我需要为可以在 USB 端口读取和写入字符的应用程序编写代码。

我认为最好的方法是使用 IO Kit 和 POSIX ......

老实说,我在开发者网站上找到的关于 IOKit 的文档很难理解。

有没有关于使用 IOKit 与硬件设备对话和获取信息的基本教程?

如果做不到这一点,是否有关于 OSX 架构基本概念的基本教程?当他们开始谈论马赫任务和紧排结果时,我完全迷失了。

提前致谢

4

1 回答 1

3

如果您的设备基本上只是一个插入标准 USB/串行适配器的串行设备,那么您不需要降到 IOKit 级别。找到串行端口的 UNIX 字符设备并打开它以进行无缓冲文件 I/O。您可能希望纯粹为了枚举端口而遍历 I/O 工具包注册表,但实际 I/O 不需要它。

为了让你开始,你需要创建一个匹配的字典:

IOServiceMatching(kIOSerialBSDServiceValue);

然后通过kIOCalloutDeviceKey属性获取返回设备的文件路径。

如果它不是标准的 USB/串行适配器,则需要使用 IOKit。不幸的是,在 USB 和驱动程序的主题上,我不知道比 Apple 更好的网络资源,但是有书籍:

  • OS X 和 iOS 内核编程专门针对(有抱负的)驱动程序程序员。它包含关于 USB 的 2 章,一章介绍 USB 基础知识和内核空间驱动程序,一章介绍用户空间 USB 驱动程序。您应该希望能够启动并运行这些。(免责声明:我是这本书的技术审稿人之一;但是,我没有为它做广告,也没有获得版税)

  • Mac OS X Internals开始显示它的时代(它在 OS X 10.4 中是最新的)并且不是专门的驱动程序开发书籍。不过,它确实对 OS X 及其内核的许多部分进行了非常详细的描述。如果我没记错的话,在 USB 上不是很多。

对于 USB,您有 2 个选项:用户空间和 kenel 空间驱动程序。除非您有充分的理由在内核中执行此操作,否则我建议您在用户空间中执行此操作。API 非常不同,内核 API 是 C++,用户空间是 C。(不,我没有把它们混为一谈)在查看文档时,请确保您正在查看 2 个中的正确一个 - 它们都是称为 I/O 套件!

于 2012-01-07T10:50:42.900 回答