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

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.
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

那肯定是很多年以后!

你的鼓励就我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值