还有一些数据结构也比较关键, 关系也比较复杂:
*dev_t:
这个不是structure, 是简单变量, 只用于保存一组major number和minor number.
Linux提供一组Macro对其进行读写:
MAJOR(dev_t dev); /* 取设备的major number */
MINOR(dev_t dev); /* 取设备的minor number */
MKDEV(int major, int minor); /* 从一组指定的major number和minor number创建一个dev_t */
*struct cdev:
用于表示一个char型的设备.
*struct file_operations:
用于定义一组在某类文件上操作的函数, 根据文件类型不同, 需要实现的接口也不同.
*struct file:
用于表示某个“打开的”文件, 是与进程相关的. 每次在有程序对文件执行open系统调
用时创建. 也就是说, 同一个文件/设备, 对应在其上操作的不同的进程, 会创建多个file
结构, 而实际上操作的文件(或者说inode)是同一个。struct file里面有当前的指针位置
和一些标记位等信息;还有指向一个file_operations结构的指针,对于设备文件,这用于
提供到驱动程序的接口。
*struct inode:
用于表示文件系统树形结构中的一个节点,不论是目录还是文件。它里面保存的是文件
的具体信息,每个文件只对应一个inode结构。对于char型设备文件,这里面主要有两个
field有用:
dev_t i_rdev; /* 在表示设备文件的inode中用于存放major number和minor number */
struct cdev *i_cdev;
/* 在表示char型设备文件的inode中用于存放指向对应的cdev的指针 */
文章评论(0条评论)
登录后参与讨论