linux字符设备驱动框架理解

字符设备框架主要有四个主要数据结构

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;

}




你可能感兴趣的:(linux驱动)