linux字符cdev和inode的联系
果i_cdev为 NULL ,则说明该设备文件没有被打开.
多个设备可以共用同一个驱动程序.,通过字符设备的inode 中的i_devices 和 cdev中的list组成一个链表 ,系统调用open打开一个字符设备的时候, 通过一系列调用,最终会执行到 chrdev_open. 拥有帝国一切,皆有可能。欢迎访问phome.net (最终是通过调用到def_chr_fops中的.open, 而def_chr_fops.open = chrdev_open. 这一系列的调用过程,本文暂不讨论) int chrdev_open(struct inode * inode, struct file * filp) chrdev_open()所做的事情可以概括如下: 1. 根据设备号(inode->i_rdev), 在字符设备驱动模型中查找对应的驱动程序, 这通过kobj_lookup() 来实现, kobj_lookup()会返回对应驱动程序cdev的kobject. 2. 设置inode->i_cdev , 指向找到的cdev. 3. 将inode添加到cdev->list的链表中. 4. 使用cdev的ops 设置file对象的f_op 5. 如果ops中定义了open方法,则调用该open方法 6. 返回. 执行完 chrdev_open()之后,file对象的f_op指向cdev的ops,因而之后对设备进行的read, write等操作,就会执行cdev的相应操作. 拥有帝国一切,皆有可能。欢迎访问phome.net |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |