BeOS - 既存のドライバモデルを調べよう
Mona のドライバモデルをきちんと決めるべく既存の OS のドライバモデルを調べていこう。
前回までのあらすじはこちら。(Windows - 既存のドライバモデルを調べよう)
カーネルがドライバに提供する機能
- 割り込み disable/enable
- spin lock
- タイマー
- 割り込みハンドラ登録
- 物理メモリ固定
- DMA
- 他のデバイスへのアクセス
- ドライバが設定ファイルを読むなど。
カーネルのドライバ管理方法
- devfs
- ドライバが登録時に devfs に自分を publish する
- これによりそのドライバに対する open/close/read/write が使えるようになる
- ドライバがエクスポートした関数を適宜 call 。
空間
ドライバの一部をそれぞれカーネル空間、ユーザー空間におく事ができる(どういう意味においてかは不明)
ドライバがエクスポートすべきもの
デバイスドライバ: デバイスドライバを書く より引用。
カーネルはある既知のエントリポイントをコールすることによってドライバに対して通信します,
そしてそのエントリポイントはexportするように実装されなければなりません. このエントリポイントは
hook
typedef struct { device_open_hook open; device_close_hook close; device_free_hook free; device_control_hook control; device_read_hook read; device_write_hook write; device_select_hook select; device_deselect_hook deselect; device_readv_hook readv; device_writev_hook writev; } device_hooks;
参考URL
- http://euc.jp/beos/beware.ja.html
- 実際のドライバのコードがダウンロード可能
- Developer Library: Drivers
- ドライバの作り方日本語訳
- BeOSドライバAPIの変更点