![在设备驱动程序编程中,结构“cdev”和“inode”之间有什么区别?](https://linux22.com/image/204604/%E5%9C%A8%E8%AE%BE%E5%A4%87%E9%A9%B1%E5%8A%A8%E7%A8%8B%E5%BA%8F%E7%BC%96%E7%A8%8B%E4%B8%AD%EF%BC%8C%E7%BB%93%E6%9E%84%E2%80%9Ccdev%E2%80%9D%E5%92%8C%E2%80%9Cinode%E2%80%9D%E4%B9%8B%E9%97%B4%E6%9C%89%E4%BB%80%E4%B9%88%E5%8C%BA%E5%88%AB%EF%BC%9F.png)
我目前正在操作系统课程中学习设备驱动程序,并且对“inode”结构和“cdev”结构之间的区别感到困惑。有人可以澄清这两种结构之间的差异以及它们要实现的目标吗?
答案1
您的问题没有提及任何具体上下文;这个答案描述了struct cdev
和struct inode
。
两者有着本质的不同。
struct cdev
代表一个字符设备,提供对驱动程序的访问;它指向字符设备支持的各种操作的实现。
struct inode
代表一个索引节点,以及内核使用它并跟踪它所需的所有信息。索引节点提供对文件的访问,并包含文件的元数据:其所有权、权限、ACL、时间戳、大小等。内核需要知道它绑定到哪个文件系统、它支持的操作的实现在哪里、它的功能是什么。状态是等
如果 inode 本身对应于字符设备,则a 的实例struct inode
可以包含指向 a 的指针(struct cdev
例如对应的 inode /dev/null
,一旦在内核中实例化,就由 表示,struct inode
并i_cdev
指向相关的字符设备)。