当前位置:  技术问答>linux和unix

驱动编译错误 variable `globalvar_fops' has initializer but incomplete type

    来源: 互联网  发布时间:2016-02-24

    本文导语:  #include  #include  #include  #include  #include  #include  #ifndef   __KERNEL__      #define   __KERNEL__ #endif      #ifndef   MODULE      #define   MODULE      #endif MODULE_LICENSE ("GPL"); #define MAJOR_NUM 254 static ssize_t glob...

#include 
#include 
#include 
#include 
#include 
#include 

#ifndef   __KERNEL__     
#define   __KERNEL__
#endif     
#ifndef   MODULE     
#define   MODULE     
#endif



MODULE_LICENSE ("GPL");

#define MAJOR_NUM 254



static ssize_t globalvar_read(struct file  *, char *, size_t , loff_t * );
static ssize_t  globalvar_write(struct file *, const char *, size_t , loff_t *);


static int global_var=0;


static ssize_t globalvar_read(struct file *filp, char * buf, size_t len, loff_t *off)
{
  if(copy_to_user(buf, &global_var, sizeof(int)))
    {
      return -EFAULT;
    }

  return sizeof(int);

}

static ssize_t globalvar_write(struct file *filp, const char *buf, size_t len, loff_t *off)
{
  if(copy_from_user(&global_var, buf,sizeof(int)))
    {
      return  -EFAULT;
    }

  return sizeof(int);
}

static struct file_operations globalvar_fops = 
{
 read: globalvar_read,
 write: globalvar_write,
  
} ;

static int  __init globalvar_init(void)
{
  int ret;

  ret = register_chrdev(MAJOR_NUM, "glovalvar", &globalvar_fops);
  if(ret)
    {
      printk("global register failure");
    }
  else
    {
      printk("global register sucess");

    }

  return ret;

}

static int  __exit globalvar_exit(void)
{
  int ret;

  ret = unregister_chrdev(MAJOR_NUM, "globalvar");
  if(ret)
    {
      printk("gloval unregister failure");
    }
  else
    {
      printk("global unregistr success");
    }

  return ret;
}


module_init(globalvar_init);
module_exit(globalvar_exit);


编译之 

[root@localhost xu]# gcc -D_KERNEL_ -DMODULE -DLINUX -I /usr/src/linux-2.4.20-8/include -c -o globalvar.o  globalvar.c
 ............
globalvar.c: At top level:
globalvar.c:23: warning: `struct file' declared inside parameter list
globalvar.c:23: warning: its scope is only this definition or declaration, which is probably not what you want
globalvar.c:24: warning: `struct file' declared inside parameter list
globalvar.c:30: warning: `struct file' declared inside parameter list
globalvar.c:31: conflicting types for `globalvar_read'
globalvar.c:23: previous declaration of `globalvar_read'
globalvar.c:41: warning: `struct file' declared inside parameter list
globalvar.c:42: conflicting types for `globalvar_write'
globalvar.c:24: previous declaration of `globalvar_write'
globalvar.c:51: variable `globalvar_fops' has initializer but incomplete type
globalvar.c:53: unknown field `read' specified in initializer
globalvar.c:53: warning: excess elements in struct initializer
globalvar.c:53: warning: (near initialization for `globalvar_fops')
globalvar.c:54: unknown field `write' specified in initializer
globalvar.c:54: warning: excess elements in struct initializer
globalvar.c:54: warning: (near initialization for `globalvar_fops')
globalvar.c: In function `__cleanup_module_inline':
globalvar.c:96: warning: return from incompatible pointer type
globalvar.c: At top level:
globalvar.c:51: storage size of `globalvar_fops' isn't known

我是在 red hat 9  下编译的 usr/src/linux-2.4.20-8/include 是安装时自带的源码目录 gcc是red hat 9 自带的 gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)
将#include 改为
#include 
也不对

总是出现这样的错误:
variable `globalvar_fops' has initializer but incomplete type
storage size of `globalvar_fops' isn't known

这困扰我几天了,刚学习驱动就这样困难,请高手指点!!非常感谢!

|
gcc -D _KERNEL_ -DMODULE -DLINUX -I /usr/src/linux-2.4.20-8/include -c -o globalvar.o  globalvar.c

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 动态编译与静态编译驱动程式疑问?
  • 操作系统 iis7站长之家
  • 谁编译过PLX9054 Linux的驱动程序,我给100分教我编译和安装??
  • 请问做好的驱动,发布给用户的时候,用户必须要在各自的Linux中重新编译驱动源码才能使用吗?
  • 2.6.x驱动的编译如何指定编译工具?
  • ubuntu编译驱动问题
  • !请问,新下载的驱动程序该如何编译进内核呢?
  • 将驱动模块编译进内核是否有用??
  • rndis驱动编译成内核模块
  • 驱动模块编译调试问题、、????
  • 怎样交叉编译2.6内核下的驱动?
  • Linux下PCI驱动,怎么解决不同版本内核都需要重新编译的问题??
  • 求助,关于编译驱动进内核的一个问题,实在找不到资料了!
  • 关于网卡驱动编译的问题
  • 怎样编译多个文件的驱动???
  • 驱动怎么不能静态编译进内核?
  • 驱动模块编译进内核的小问题~~~~~~~~
  • 在redhat开发驱动时,需要下载一个linux源码,编译,替掉原有的内核吗?
  • 驱动编译insmod问题,100分相送,在线等待,有效马上结贴
  • 机子的显卡是sis650,linux是Redhat7.2(自身安装程序里没有类驱动)我从sis网站上下了forRedHat7.2的驱动是xxx.o说明已经编译过了,我放
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 字符设备驱动,混杂设备驱动,总线、设备、驱动模型、平台驱动
  • UIO(linux Userspace I/O子系统)用户空间设备驱动I/O技术介绍
  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • Linux环境下,“PC机的驱动”与“嵌入式驱动”有什么区别?
  • linux:怎么在驱动中调用IIC驱动?
  • linux驱动 单片机驱动
  • linux下一个驱动怎么调用另一个驱动
  • u boot中怎样写flash驱动以及串口驱动
  • Linux环境下,如何一个驱动中调用另外一个驱动
  • 一个驱动文件,生成多个驱动模块??


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3