OSX - 既存のドライバモデルを調べよう

Mona のドライバモデルをきちんと決めるべく既存の OS のドライバモデルを調べていこう。

I/O キット

Apple が提供するドライバ開発フレムワーク。

  • カーネルレベルで動くドライバ
  • アプリケーションレベルで動くドライバ

のどちらも対応。オブジェクト指向である。

  • I/O レジストリインスタンス化されたドライバの情報を保持。
  • I/O カタログ。システムで利用可能な Class のデータベース。
  • ユーザー空間で動いているアプリがドライバと通信可能なインターフェースの提供。
  • カメラ、プリンタのサポートが弱い。

FreeBSD のドライバモデルを採用しなかった理由

FreeBSD ドライバモデルには

がない。

カーネル空間で動くドライバを書く場合

基本おすすめしないが、

  • カーネルから使われるドライバである
  • 頻繁にユーザープログラムから利用される
  • 割り込みに即座に反応しなければ行けない

の場合にはカーネル空間で動くものを作る。

ユーザー空間用の便利機能

  • higgher-level API
    • ハードウェアにアクセス可能
  • I/O キットフレームワーク device-interface technology
    • カーネルを介してハードウェアにアクセスできる

ドライバのレイヤ

  • C++ のクラスで抽象化
  • ドライバは継承を介して、family のメンバーになる
    • Ethernet のドライバであれば Network family の IOEthernetController が親クラス。
  • Nub
    • PCI Ethernet ドライバは PCI family の IOPCIDevice nub を利用して、PCI bus を利用する