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