Show page source of internal24-163-ドライバの登録 #25266

[[PageNavi(internal24-navi)]]

{{{ comment
h2w-title:ドライバの登録
}}}
 

= ドライバの登録 = #SECTION031210000000000000000

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

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

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

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

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

----

''(NIS)HirokazuTakahashi [[BR]]2000年12月09日 (土) 23時55分06秒 JST''1

[[PageNavi(internal24-navi)]]