2010年10月10日日曜日

ハードウェアをアクセスするサンプルコード1st

Mac OS X ハードウェア アクセスの概要

Mac OS XではIO Registryと呼ばれるデータベースにハードウェアに関する情報やDevice Driverなどを保管しています。Windowsのデバイス マネージャに近いものと考えても良いでしょう。このIO RegistryをブラウズするツールとしてIORegistryExplorer.appというソフトウェアがあります。Mac OS Xに標準付属の開発環境Xcodeをインストールすると以下の場所にありますので、試しにブラウズしてみてください。


/Developer/Applications/Utilities/IORegistryExplorer.app

Mac OS XではDarwinカーネル内にあるI/O Kitがハードウェアに関連するリソースを管理しています。ハードウェアをアクセスするにはこのI/O Kitを通してやり取りしますが、Darwinカーネルのメモリ空間(カーネル空間)とアプリケーションのメモリ空間(ユーザ空間)は分離されて、相互のやり取りは限定されています。ユーザ空間にあるプログラムからカーネル空間のI/O Kitとやり取りするために、通常はDevice Interfaceを経由してやり取りします。Device Interfaceはユーザ空間側にあるライブラリまたはプラグインです。

Mac OS Xのユーザ空間側にあるプログラムからハードウェアにアクセスする一般的な手順は、まずIO Registryのデータベースに問い合わせてハードウェアを参照するオブジェクトを入手します。次に入手したオブジェクトを元にDevice Interfaceのプラグインを開いて、そのプラグインとI/O Kitを経由して目的の装置とやり取りをします。やり取りが終わるとオブジェクトなどを解放してプログラムを終了させます。

サンプルコードはTerminal用のアプリケーションで、USBを管理するソフトウェアであるUSBLibUSBFamilyのバージョンを表示します。この時に上記のIO RegistryデータベースにUSBの情報を問い合わせて、Device Interfaceを経由してそのバージョンを入手し表示しています。

戻る

0 件のコメント: