旧インタフェース:register_chrdev //デバイスドライバ(登録デバイス数と対応するfile_operation運営体制の実現)に登録
//短所:唯一のメジャー番号、なし(サポートされていない)マイナー番号
の新しいインターフェースの:
register_chrdev_region(機器登録数)/ alloc_chrdev_regionを(自動分注装置の数)+ CDEV
CDEV構造と関連する関数
:構造 、構造体CDEV { 構造体たkobject KOBJ、 構造体 Module1の* 所有者; constの 構造体 file_operations * OPS; //が利用可能な特定の操作機能を含む 構造体LIST_HEAD一覧; たdev_tのDEV; // メジャー及びマイナーデバイス番号 の符号なし整数COUNT; };
相関関数:
cdev_alloc(CDEV構造のためのメモリスペースを割り当てる)、cdev_init、
cdev_add(駆動機能に登録)、cdev_del
デバイス番号に関連するマクロ:のmkdev、MAJOR、MINOR
新規登録文字デバイスドライバインタフェースのステップ:
1、/メジャーとマイナー番号に自動的に割り当てられた登録
register_chrdev_region(登録デバイス数)/ alloc_chrdev_region(自動分注装置番号)
2を、登録キャラクタデバイスドライバ
cdev_initは
cdev_add
新しいキャラクタデバイスドライバインタフェースキャンセル手順を:
1、キャラクタデバイスドライバのキャンセルは
cdev_del
2、メジャーとマイナーデバイス番号の申請の取り消し
unregister_chrdev_region
途中でエラーを処理する反射型エラーは
(1)。多くのカーネル関数は、各ステップが間違っている可能性があり操作が多く含まれ、エラーは
ありません、外出先に戻ってステップする必要があります。
エラー、エラーがロールバックするために、処理後(2)エラープローンフラグ配列は、構成されています。例えば、第3のステップは、間違ったエラーフラグFlagにジャンプジャンプを使用して、
プロセスのものが(例えば、割り当てられたデバイス番号のキャンセルなど)最初の2つの手順の実行が成功した後に産生さ
cdev_alloc関数を使用:
機能:使用kallocのCDEVは、ポインタ変数CDEV構造のヒープメモリ構造を割り当てる
目的:メモリ需要の放出を容易にする.DATAセグメント(ポインタのみを有するセグメント)のサイズを縮小する
(構造ポインタとポインタ変数のサイズだけが、唯一の可変構造の構造体のサイズによって)
プログラム・メモリを使用して:
グローバル変数を.DATAセグメント
ローカル変数スタック
のmallocヒープ
注cdev_alloc機能を使用する場合、機能はcdev_initを使用することができますまたコード:
pcdev = cdev_alloc()。 pcdev - >所有者= THIS_MODULE // cdev_init(pcdev、&test_fops)。 pcdev-> OPS =&test_fops。