我正在实现一个字符驱动程序.所以我正在注册文件操作.当我注册读取功能时,我以此方式提取了次要号码
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);
.......
此规则也适用于公开通话.
myopen(struct inode * inode, struct file * file)
struct文件定义具有对struct inode的引用.因此,一个参数足以进行公开通话.
我的问题是:
>为什么打开有两个参数? (或)为什么读取没有struct inode *参数?
>为了在读取呼叫中提取次要号码,我使用了上面的说明.要查找定义和头文件,我花了1小时30分钟.有什么简单的方法可以找到结构的定义?
>通过结构文件可以找到结构索引节点引用的方法有几种,什么是最佳方法?
解决方法:
您不得使用该构造搜索索引节点.打开文件后,文件甚至目录可能已被删除.
>在打开函数中,您从inode查找您自己的数据(或分配您自己的数据),并设置file-> private_data指针;和
>在读取功能中,然后使用file-> private_data访问您自己的内容.
标签:embedded-linux,linux-kernel,linux-device-driver,linux
来源: https://codeday.me/bug/20191030/1966615.html