首页 > 解决方案 > 为什么变量在导入 fs.h 时具有不完整的类型“struct file_operations”?

问题描述

我尝试导入 file_operations 的结构并收到此错误:

Variable has incomplete type 'struct file_operations'

我的进口是

#include <linux/kernel.h>   /* We're doing kernel work */
#include <linux/module.h>   /* Specifically, a module */
#include <linux/fs.h>       /* for register_chrdev */
#include "sys/types.h"

错误出现在 fops:

 struct file_operations Fops =
        {
                .owner    = THIS_MODULE, // Required for correct count of module usage. This prevents the module from being removed while used.
                .read           = device_read,
                .write          = device_write,
                .open           = device_open,
                .release        = NULL
        };

最少的代码:

#include <linux/kernel.h>   /* We're doing kernel work */
#include <linux/module.h>   /* Specifically, a module */
#include <linux/fs.h>       /* for register_chrdev */
#include "sys/types.h"

 struct file_operations Fops =
        {
                .owner    = THIS_MODULE, // Required for correct count of module usage. This prevents the module from being removed while used.
                .read           = device_read,
                .write          = device_write,
                .open           = device_open,
                .release        = NULL
        };

标签: clinuxfschardev

解决方案


如果您将您的代码与https://docs.huihoo.com/doxygen/linux/kernel/3.7/structfile__operations.htmlfile_operations()中的定义进行比较,您还没有初始化很多字段,这可能就是抛出不完整错误的原因。

某些操作不是由驱动程序实现的。例如,处理视频卡的驱动程序不需要从目录结构中读取。file_operations 结构中的相应条目应设置为 NULL。

来源:https ://tldp.org/LDP/lkmpg/2.4/html/c577.htm

通常,如果您有 gcc 的 C99 扩展,您的方式是有效的


推荐阅读