3

キャラクタードライバーを実装しています。だから私はファイル操作を登録しています。read関数を登録するときminor、この方法で数値を抽出しました

     myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset)
     {
         int minor;

         minor = MINOR(file->f_path.dentry->d_inode->f_pos->i_rdev);
         .......

openこのルールは通話にも適用されます。

     myopen(struct inode * inode, struct file * file)

struct file定義には への参照がありstruct inodeます。したがって、open呼び出しには 1 つの引数で十分です。

私の質問は次のとおりです。

  1. なぜopen2つの引数があるのですか? (または)なぜ議論readがないのですか?struct inode *
  2. 呼び出しでマイナー番号を抽出するためにread、上記の命令を使用しました。定義とヘッダー ファイルを見つけるのに 1 時間 30 分かかりました。構造の定義を見つける簡単な方法はありますか?
  3. struct inodethroughの参照を見つける方法はいくつありますstruct file か?また、最適な方法は何ですか?
4

1 に答える 1

4

その構造を使用して inode を検索してはなりません。ファイルが開かれた後にファイルまたはディレクトリが削除された可能性があります。

カーネルの規則 ( Linux Device Driversの第 3 章を参照) は、

  1. 関数でopenは、inode から独自のデータを検索し (または独自のデータを割り当て)、file->private_dataポインターを設定します。と

  2. あなたのread関数では、file->private_dataあなた自身のものにアクセスするために使用します。

于 2013-10-26T08:39:50.340 に答える