キャラクターデバイスドライバーの内部実装

ファイルが存在する限り、一意の対応する inode 番号が存在し、対応する struct inode 構造が存在します。アプリケーション層で open() を介してデバイス ファイルを開くと、対応する i ノード番号が生成され、ファイルはinode 番号から見つけられる inode 構造、inode 構造

 

struct inode {     umode_t i_mode;     符号なしの短い i_opflags;     kuid_t i_uid;     kgid_t i_gid;     unsigned int i_flags;




    dev_t i_rdev;
    loff_t i_size;
}


キャラクターデバイスドライバーのオブジェクト構造体cdev

構造体 cdev {

    構造体 kobject kobj;

    構造体モジュール *所有者;

   const struct file_operations *ops;

    struct list_head リスト;

   dev_t 開発;

    符号なし整数の数。

}

ドライバオブジェクト構造内で操作メソッド構造体ポインタを見つけ、ドライバプログラム内で操作メソッド構造体変数を定義および初期化し、オープンとクローズ、読み取りと書き込みなどの特定の機能を実現します。

struct file_operations fops ={

    .open=mycdev_open、

    .unlocked_ioctl=mycdev_ioctl、

    .release=mycdev_close、

};

ドライバーの open 操作メソッドへの open 関数コールバックのルート:

open()--->sys_open()--->struct inode 構造体--->struct cdev 構造体--->struct file_operations 構造体--->mycdev_open

おすすめ

転載: blog.csdn.net/m0_53451387/article/details/131235251