デバイスが基本的に、標準の USB/シリアル アダプタに接続された単なるシリアル デバイスである場合は、IOKit レベルに落とす必要はありません。シリアル ポート用の UNIX キャラクター デバイスを見つけて、バッファなしのファイル I/O 用に開きます。ポートを列挙するためだけに I/O キット レジストリをトラバースすることもできますが、実際の I/O には必要ありません。
それを始めるには、次のように一致する辞書を作成する必要があります。
IOServiceMatching(kIOSerialBSDServiceValue);
プロパティを介して、返されたデバイスのファイル パスを取得しkIOCalloutDeviceKey
ます。
標準の USB/シリアル アダプタでない場合は、IOKit を使用する必要があります。残念ながら、USB とドライバーに関する Apple の Web リソースより優れた Web リソースを知りませんが、以下の本があります。
OS X および iOS カーネル プログラミングは、特に (意欲的な) ドライバー プログラマーを対象としています。USB に関する 2 つの章があり、1 つは USB の基礎とカーネル空間ドライバー、もう 1 つはユーザー空間の USB ドライバーです。うまくいけば、それらを起動して実行できるはずです。(免責事項:私はこの本の技術評論家の 1 人でした。ただし、私はこの本を宣伝するために報酬を受け取っておらず、印税も受け取っていません)
Mac OS X Internalsは古さを見せ始めており (OS X 10.4 の時点で最新です)、特にドライバ開発の本ではありません。ただし、OS X とそのカーネルの多くの部分について非常に詳細に説明しています。私の記憶が正しければ、USBではそれほど多くはありません。
USB の場合、ユーザー空間ドライバーとケネル空間ドライバーの 2 つのオプションがあります。カーネルで行う正当な理由がない限り、ユーザー空間で行うことをお勧めします。API は大きく異なります。カーネル API は C++ で、ユーザー空間は C です (いいえ、私はそれらを混同していません)。ドキュメントを見るときは、2 つのうちの正しいものを見ていることを確認してください - それらは両方です。 I/Oキット!