Mac OS X、C 用于读取 PCI 设备信息的工具

发布于 2024-10-13 01:34:11 字数 206 浏览 3 评论 0原文

我正在尝试学习如何从 Mac OS X 中的 PCI 设备获取信息。到目前为止,我还没有在 sysctl(3) 中找到任何有关它的信息,并且似乎 BSD 中的旧 devinfo(3) 设施不可用可用的。

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

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

I'm trying to learn how to get information from PCI devices in Mac OS X. So far I haven't been able to find anything about it in sysctl(3) and it seems the old devinfo(3) facilities from BSD are not available.

I need a C facility for this, I know there is an I/O kit framework for Objective C but I cannot use this.

The specific information I'm after is pretty basic, just vendor and device ID's.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

记忆消瘦 2024-10-20 01:34:12

I/O Kit是设备信息的系统框架。它不是 Objective-C API;相反,Apple 使用 C++ 的受限子集。引用I/O Kit 基础知识文件,

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

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

受限子集不允许 C++ 的某些功能,包括

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

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

如果您无法使用 C++,那么一种替代方法是让您的 C 程序调用 /usr/bin/ioreg 并解析其结果。


编辑:您可能需要查看从应用程序访问硬件文档。看起来访问 I/O 注册表可以在大部分(如果不是全部)使用 C 代码完成,并使用一些 Core Foundation。

I/O Kit is the system framework for device information. It is not an Objective-C API; instead, Apple use a restricted subset of C++. Quoting the I/O Kit Fundamentals document,

Apple considered several programming languages for the I/O Kit and chose a restricted subset of C++.

C++ was chosen for several reasons. The C++ compiler is mature and the language provides support for system programming. In addition, there is already a large community of Macintosh (and BSD) developers with C++ experience.

The restricted subset disallows certain features of C++, including

  • Exceptions
  • Multiple inheritance
  • Templates
  • Runtime type information (RTTI)—the I/O Kit uses its own implementation of a runtime typing system

These features were dropped because they were deemed unsuitable for use within a multithreaded kernel. If you feel you need these features, you should reconsider your design. You should be able to write any driver you require using I/O Kit with these restrictions in place.

If you cannot use C++ then one alternative is to have your C program call /usr/bin/ioreg and parse its results.


Edit: you might want to take a look at the Accessing Hardware from Applications document. It looks like accessing the I/O registry can be done with C code for the most part (if not all), with a bit of Core Foundation.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文