pl2303 (4)
む。詳解 Linux カーネルの 13.4.1 デバイスドライバの登録という節に driver_register あたりの記述があったので、以下にてメモを。
ドライバの登録
- デバイスドライバは自分自身を_登録_する必要がある
- 未登録ドライバなデバイスファイルにアクセスすると -ENODEV が戻る
- ドライバを静的にカーネルに組み込む場合、デバイスドライバの登録処理はカーネルの初期化処理にて実行される
- カーネルモジュールの場合、デバイスの登録処理はモジュールを組み込むときに行なわれる
- 汎用 PCI デバイスの場合
- デバイスドライバを適切に処理するために、pci_driver ディスクリプタの割り当てが必要
- pci_driver ディスクリプタはカーネルの PCI 層でデバイスを処理するために使用する
- デバイスドライバは pci_driver ディスクリプタのメンバの一部を初期化したあと、pci_register_driver() 関数を呼び出す
- pci_driver ディスクリプタは、組み込みのデバイスドライバディスクリプタを持っている
- pci_register_functon() 関数は組み込みのデバイスドライバディスクリプタのメンバを初期化したあと、driver_register() 関数を呼び出し、ドライバをデバイスドライバモデルのデータ構造に挿入する
- デバイスドライバの登録では、カーネルは利用できるようになっていないハードウェアデバイスの中からそのドライバが操作可能なものを検索する
- 検索処理には、対応するバス種別ディスクリプタ bus_type の match メソドと device_driver オブジェクトの probe メソドを使用する
- ドライバが処理可能なハードウェアデバイスが見つかった場合
- カーネルはデバイスオブジェクトを割り当てる
- device_register() 関数を呼び出し、デバイスドライバモデルにデバイスを挿入する