ドライバの登録

ブロックデバイスのドライバの登録は、register_blkdev関数を用いて、ブロックデバイスドライバの登録テーブルblkdev[]に、デバイス名とデバイス操作関数テーブルの登録を行う。unregister_blkdev関数はその逆に登録を抹消する。

キャラクタデバイスの場合は、register_chrdev関数、unregister_chrdev巻数をを用いる。

register_blkdev(デバイスメジャー番号, デバイス名, デバイス操作関数テーブル)
{
    if (デバイスメジャー番号 の指定が無いなら) {
              ブロックデバイス登録テーブルblkdev[]の空きスロットを探し、
       デバイス名とデバイス操作関数テーブルを登録する。
        } else {
              ブロックデバイス登録テーブルblkdev[デバイスメジャー番号]に、
       デバイス名とデバイス操作関数テーブルを登録する。
        }
}

ブロック型デバイスの場合は、これ以外にもデバイスの初期化時に以下のテーブルにデバイス情報を設定しておかねばならない。また割り込みを利用するデバイスでは、request_irq関数を用いて割り込みハンドラを登録して置かねばならない。

  • blk_dev[]テーブル
    • メジャー番号毎に、ドライバ起動関数を登録する(request_fnメンバ)。 この関数の登録は必須である。
  • blk_size[][]テーブル
    • メジャー番号マイナー番号毎に、デバイスのサイズを設定する.
    • 未設定の場合は、ブロックデバイスアクセス時にサイズのチェックを行わない.
  • blksize_size[][]テーブル
    • メジャー番号マイナー番号毎に、ブロックサイズを指定する。
    • 未設定時は1Kbyteとなる。通常は設定しないで良い。
  • hardsect_size[][]テーブル
    • メジャー番号マイナー番号毎にセクタサイズを指定する。
    • 未設定時は512byteとなる。
    • 現在は参照されていないように思われる。
  • read_ahead[]テーブル
    • メージャー番号毎に、先読みするブロック数を指定する。

(NIS)HirokazuTakahashi
2000年06月11日 (日) 22時29分57秒 JST
1