Mac OS X で PCI デバイスから情報を取得する方法を学ぼうとしています。これまでのところ、sysctl(3) でそれについて何も見つけることができず、BSD の古い devinfo(3) 機能はそうではないようです。利用可能。
これには C 機能が必要です。Objective C 用の I/O キット フレームワークがあることは知っていますが、これを使用することはできません。
私が求めている特定の情報は非常に基本的なもので、ベンダーとデバイス ID だけです。
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 Kit は、ランタイム型付けシステムの独自の実装を使用します。
これらの機能は、マルチスレッド カーネル内での使用には不適切であると見なされたため、削除されました。これらの機能が必要だと思われる場合は、設計を再検討する必要があります。これらの制限を設けた I/O Kit を使用して、必要なドライバーを作成できるはずです。
C++ を使用できない場合は、別の方法として、C プログラムで呼び出し/usr/bin/ioreg
てその結果を解析することもできます。
編集:アプリケーションからのハードウェアへのアクセスに関するドキュメントをご覧になることをお勧めします。I/O レジストリへのアクセスは、ほとんどの場合 (すべてではないにしても)、Core Foundation を使用して C コードで実行できるようです。