字符设备框架主要有四个主要数据结构
1. struct cdev
2. struct file_operations
3. struct inode
4. struct file
进程通过文件表(file table)的fd访问inode,在open之前cdev的file_operations赋值给filep->file_operations。设备open时驱动可以通过
inode找到cdev,我们将cdev保存到filep->private_data中,自此以后字符设备驱动的read、write和release就不用通过inode找到cdev了。
一、数据结构 cdev
struct cdev
{
dev_t dev;
struct file_operations f_ops;
....
}
关于设备号的分配方式
第一种 静态方式 register_chrdev_region
第二种 动态方式 alloc_chrdev_region
cdev的操作函数
cdev_init、cdev_add和cdev_del
二、数据结构 file_operation
struct file_operations
{
open
read
write
release
...
}
三、数据结构inode
struct inode
{
dev_t i_rdev;//设备号
struct cdev *i_cdev;/*目的是实现一套file_operations驱动多个字符设备*/
...
}
四、数据结构file
struct file
{
void *private_data;
}