字符设备驱动内部实现

只要文件存在,就会有唯一对应的inode号,且相应的会存在一个struct inode结构体.,在应用层通过open()打开一个设备文件,会对应产生一个inode号,通过inode号可以找到文件的inode结构体,inode结构体

字符设备驱动内部实现_第1张图片

 

struct inode {
    umode_t            i_mode;
    unsigned short        i_opflags;
    kuid_t            i_uid;
    kgid_t            i_gid;
    unsigned int        i_flags;

    dev_t            i_rdev;
    loff_t            i_size;
}


字符设备驱动对象结构体cdev

struct cdev {

    struct kobject kobj;

    struct module *owner;

    const struct file_operations *ops;

    struct list_head list;

    dev_t dev;

    unsigned int count;

}

在驱动对象结构体中找到操作方法结构体指针,在驱动程序中定义一个操作方法结构体变量并初始化,实现具体的打开关闭,读写等功能

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

你可能感兴趣的:(linux,开发语言)