0

我正在尝试学习如何从 Mac OS X 中的 PCI 设备获取信息。到目前为止,我无法在 sysctl(3) 中找到任何关于它的信息,而且似乎 BSD 的旧 devinfo(3) 工具不是可用的。

为此我需要一个 C 工具,我知道 Objective C 有一个 I/O 工具包框架,但我不能使用它。

我所追求的具体信息非常基本,只是供应商和设备 ID。

4

1 回答 1

1

I/O Kit设备信息的系统框架。它不是一个 Objective-C API;相反,Apple 使用 C++ 的受限子集。引用I/O Kit Fundamentals文档,

Apple 为 I/O Kit 考虑了几种编程语言,并选择了 C++ 的受限子集。

选择 C++ 有几个原因。C++ 编译器成熟,语言为系统编程提供支持。此外,已经有一个拥有 C++ 经验的 Macintosh(和 BSD)开发人员的大型社区。

受限子集不允许 C++ 的某些特性,包括

  • 例外
  • 多重继承
  • 模板
  • 运行时类型信息 (RTTI)——I/O 工具包使用它自己的运行时类型系统实现

这些功能被删除是因为它们被认为不适合在多线程内核中使用。如果你觉得你需要这些功能,你应该重新考虑你的设计。您应该能够使用具有这些限制的 I/O Kit 编写您需要的任何驱动程序。

如果您不能使用 C++,那么另一种选择是让您的 C 程序调用/usr/bin/ioreg并解析其结果。


编辑:您可能想查看Accessing Hardware from Applications文档。看起来访问 I/O 注册表大部分(如果不是全部)都可以使用 C 代码完成,需要一点核心基础。

于 2011-01-21T14:45:11.887 回答