キャラクタデバイスインタフェースを登録します

旧インタフェース: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。

 

おすすめ

転載: www.cnblogs.com/embeded-linux/p/11109776.html