我正在实施一个字符驱动程序。 所以我正在注册文件操作。 当我正在注册read
function,我提取minor
号码这种方式
myread(struct file * file, char __user * ubuf, size_t lbuf, loff_t *offset) { int minor; minor = MINOR(file->f_path.dentry->d_inode->f_pos->i_rdev); .......
这条规则也适用于open
电话。
myopen(struct inode * inode, struct file * file)
struct file
定义有对struct inode
的引用。 所以一个论点就足够open
电话了。
我的问题是:
open
有两个论点? (或)为什么read
没有struct inode *
参数? read
电话中提取次要号码,我使用了上述说明。 为了find定义和头文件,我花了1小时30分钟。 有没有简单的方法来find结构的定义? struct file
findstruct inode
的引用,最好的办法是什么? 您不能使用该构造来搜索inode; 该文件或甚至目录可能已被删除后打开文件。
内核约定(请参阅Linux设备驱动程序的第3章)是
在你的open
函数中,你可以从inode中查找自己的数据(或者分配你自己的数据),并设置file->private_data
指针; 和
在你的read
函数中,然后使用file->private_data
来访问你自己的东西。