FILE, INODE, CDEV对象的描述
struct file对象:描述进程中打开open一个文件的信息:文件名,标志(可读写),文件偏移
open("/dev/led", O_RDWR|O_CREAT, 0666);struct file {
struct path f_path;
const struct file_operations*f_op;
unsigned int f_flags;
fmode_t f_mode;
loff_t f_pos; //文件偏移
void *private_data;//万能指针
}
struct 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 inode对象: 描述文件系统中的某个文件的属性(文件权限,类型,uid,gid,修改时间等)
struct inode {
umode_t i_mode;
uid_t i_uid;
gid_t i_gid;
dev_t i_rdev; //设备号
const struct file_operations*i_fop;
struct timespeci_atime;
struct timespeci_mtime;
struct timespeci_ctime;
}
INODE与CDEV对象的关系
FILE,FD,INODE与CDEV对象的关系
FILE,FD,INODE与CDEV对象的构建顺序
申请设备号(alloc_chrdev_region/register_chrdev_region)-->创建cdev对象( cdev_alloc->cdev_init->cdev_add)->创建inode节点(mknod或class_create+device_create)->打开文件file-->得到fd。