初歩的な質問かもしれませんが、わかる方教えてください。
キャラクタードライバーに struct cdev を登録する必要があるのはなぜですか?
初歩的な質問かもしれませんが、わかる方教えてください。
キャラクタードライバーに struct cdev を登録する必要があるのはなぜですか?
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 構造体を介して) 定義したすべての関数を呼び出すことができます。
あなたの質問について私が理解していることから、あなたは の意味について尋ねているようですstruct cdev。構造struct cdevの要素の 1 つです。inodeすでにご存知かもしれませんが、inode構造体はファイルを表すためにカーネルによって内部的に使用されます。はstruct cdev、char デバイスを表すカーネルの内部構造です。cdev* i_cdevそのため、のフィールドはcdevstruct inode構造体へのポインターであり、inodeは char デバイス ファイルを参照します。したがって、カーネルがキャラクターデバイスを呼び出さなければならない場合、cdevタイプの構造体を登録する必要があります。