9

初歩的な質問かもしれませんが、わかる方教えてください。

キャラクタードライバーに struct cdev を登録する必要があるのはなぜですか?

4

2 に答える 2

22

struct cdevカーネル内のキャラクター デバイスを表します。

すべてのストリーミング デバイス (例: uart、キーボード) はキャラクター デバイス カテゴリに分類され、デバイス ノード ファイル(例: /dev/ttyS0 ) としてユーザー空間で使用できます。ユーザー アプリケーションは、標準のファイル I/O 操作を使用してデバイスにアクセスします。

ここに画像の説明を入力

カーネル内では、キャラクター ドライバーがデバイス ファイルとストリーミング デバイスの間に入り、このドライバー レイヤーがファイル I/O 操作をデバイス操作に、またはその逆に変換します。

キャラクタ デバイス ドライバの開発struct file_operationsでは、最も重要なデータ構造が使用されます。この構造体は、デバイスのopen()、read()、write()、close()、ioctl() などの基本的なファイル i/o 機能を実装するために使用されます。

struct cdevfile_operations構造体は、構造体とその他の重要なドライバー情報 (メジャー/マイナー番号) をカプセル化します。キャラクタードライバーをカーネルに登録する新しい方法です。

cdev 構造は、次の API を介してカーネルによってアクセスされます。

cdev_init() - used to initialize struct cdev with the defined file_operations
cdev_add()  - used to add a character device to the system. 
cdev_del()  - used to remove a character device from the system

への呼び出し後、cdev_add()デバイスはすぐに有効になります。(file_operations 構造体を介して) 定義したすべての関数を呼び出すことができます。

于 2013-02-05T18:16:44.057 に答える
10

あなたの質問について私が理解していることから、あなたは の意味について尋ねているようですstruct cdev。構造struct cdevの要素の 1 つです。inodeすでにご存知かもしれませんが、inode構造体はファイルを表すためにカーネルによって内部的に使用されます。はstruct cdev、char デバイスを表すカーネルの内部構造です。cdev* i_cdevそのため、のフィールドはcdevstruct inode構造体へのポインターであり、inodeは char デバイス ファイルを参照します。したがって、カーネルがキャラクターデバイスを呼び出さなければならない場合、cdevタイプの構造体を登録する必要があります。

于 2013-02-05T11:20:06.057 に答える