当前位置: 代码迷 >> 综合 >> linux中file,cdev,inode之间的关系
  详细解决方案

linux中file,cdev,inode之间的关系

热度:74   发布时间:2023-12-15 14:08:12.0

file:(成员不完全)在这里插入图片描述
cdev:
在这里插入图片描述
inode:(成员不完全)在这里插入图片描述
file,cdev,inode之间的关系:
整体关系(应用,glib,内核VFS,文件层):
在这里插入图片描述

首先(cdev):

驱动先装载,注册字符设备(主设备号,fops结构体等),把字符设备存到链表中,提供查找。在这里插入图片描述

然后(inode):

mknod函数创建设文件“dev/led”,创建后文件自动分配一个inode节点(有主次设备号),存在文件系统当中。在这里插入图片描述
最后(应用)open(***)时通过“dev/led”路径,(应用->文件层)找到inode节点,即找到设备号。遍历链表的cdev.在这里插入图片描述
遍历链表的cde v后从链表找到对应驱动的cdev,调用cdev(cdev->fop->open)执行open函数,(open->led_drv_open)操作硬件。在这里插入图片描述

最后(file):

应用open是产生一个struct file.(fd_table表格)
在这里插入图片描述
struct file中 f_op
在这里插入图片描述
将cdev中的fops赋值给struct file的f_op.如果应用open,write,read,都要遍历查找cdev.很耗时间。所以为了避免多次查找,将cdev中的fops赋值给struct file保存起来 ,当调用write,read时根据文件描述符找到struct file的f_op。
在这里插入图片描述
然后f_op调用cdev中的fops.
在这里插入图片描述
在这里插入图片描述

  相关解决方案