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

LDD3中scull的例子

    来源: 互联网  发布时间:2016-11-23

    本文导语:  scull模块我已经编译成功,另外我在网上找了个测试程序想测试一下,但编译的时候老是出问题: In file included from ioctl_test.c:5: scull.h:34: error: field ‘sem’ has incomplete type scull.h:35: error: field ‘cdev’ has incompl...

scull模块我已经编译成功,另外我在网上找了个测试程序想测试一下,但编译的时候老是出问题:

In file included from ioctl_test.c:5:
scull.h:34: error: field ‘sem’ has incomplete type
scull.h:35: error: field ‘cdev’ has incomplete type

源代码:
#include    
#include   
#include   
#include   
#include "scull.h"  
    
  
int main()  
{  
    int code = 0;  
  
    ……
  
    exit(0);  
}  

我网上查了一下,说好像是用户空间和内核空间的问题,但还是没弄明白,希望有人能指点一下。

|
应该是用户空间和内核空间的问题。有些数据类型是内核空间才能够识别的,在用户空间使用时,会报错。
我之前编译一个测试程序时,也出现过这样的问题。
我当时的解决方法很简单,如果测试程序中没有用到内核空间的头文件的话,就把头文件给去了。
如果用到的话,就自己写了一个头文件,只把用到的一些预定义写在里面,然后使用自己写的头文件。

方法比较初级,不过,现阶段能够解决我遇到的问题。
你的测试程序里,如果没有用到scull.h里的东西的话,就去掉吧。。。

|
scull.h中所用到的数据结构,如struct cdev,struct semaphore是由内核头文件定义的,也就是只能在内核空间环境下使用。用户应用程序只能使用各种库的头文件(一般是在/usr/include目录下),或自己定义的头文件。

你的两个错误在于,scull.h用在了用户空间的测试程序中,因而找不到struct cdev和struct semaphore的定义(也就是sem和cdev缺少类型)。

解决的办法是你自己定义用户空间的头文件,把要使用的常量(如ioctl各个命令常量),类型包含其中。

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












  • 相关文章推荐
  • 寻找学习ldd3的同志
  • 请教ldd3的驱动挂载问题!
  • 请问哪有LDD3中文影印版下载呀
  • 有关LDD3中的faulty.c的问题
  • LDD3网上下的实例源码哪个是第三章的啊?
  • ldd3书中的一个问题
  • 编程技术其它 iis7站长之家
  • ldd3: 禁止了中断,是不是就没有系统滴答了?
  • LDD3中的sbull驱动make不能通过
  • LDD3 阅读理解问题
  • 关于LDD3中short代码的分析
  • ldd3中helloworld的问题,无法生成hello.ko
  • ldd3中的“重定向控制台消息”,老是错误,为啥????
  • ldd3的hello world编译出错
  • ldd3中的一点疑惑
  • ldd3中的hello world驱动程序的疑问???
  • ldd3 新手问题
  • 有认真测试过ldd3最后一章tiny_tty.c,并能回答下面问题的高手吗?
  • 学习ldd3时按照书上的路径很多文件都找不到,谢谢
  • 根据LDD3 编写一个简单LED控制灯的驱动


  • 站内导航:


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

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

    浙ICP备11055608号-3