简单字符设备中设计的结构体

来源:互联网 发布:剃头软件叫什么 编辑:程序博客网 时间:2024/06/06 18:32

struct file 结构体

        文件结构体代表一个打开的文件,系统中每个打开的文件在内核空间中都会有一个关联的struct file结构体。它有内核在打开文件时创建,并传递给在文件操作上的任何一个函数。在文件的所有实例都关闭后,内核释放这个数据结构,在内核创建和驱动源码中,struct file的指针通常命名为filp file。

        在struct file结构体中主要关注两个变量:

  •  struct file_opertaion *f_op;  与文件的各种操作相关,如read,write等;
  • void *private_data; 在驱动调用open之前,open系统设置其有null值,我们可以将其作为自己需要的数据或者不管它;
struct inode 结构体
        VFS inode包含文件访问权限,属主,组,大小,生成时间,访问时间,最终修改时间等信息。是linux系统最基本的单位,也是文件系统连接任何子目录的桥梁。内核使用ionde结构体在内核内部表示一个文件,一个设备文件只有一个inode,但是可以有多个file描述符;
        在struct inode结构体中关注一个重要的变量:
  • dev_t i_rdev:  用来存储设备号;
struct file_operation
       linux用file_operation结构访问驱动程序函数,这个结构的每一个成员的名字都对应着调用,用户进程利用设备文件进行例如read/open等操作的时候,系统调用通过设备文件的主设备号找到相应的设备号驱动程序。然后读取这个数据结构相应的函数指针,接着把控制权交给该函数,这是linux设备驱动工作的基本原理。
      在字节设备驱动中,通过这个结构体实现的调用有open,read,write,release,ioctl等;
字符设备(cdev结构体)
      这是一个字符设备,此字符设备的一个重要的变量就是const struct file_operations *ops,字符设备通过这个指针变量找到file_operation中的调用,从而执行驱动程序。
原创粉丝点击