免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1754 | 回复: 2
打印 上一主题 下一主题

编译字符设备驱动file_operations结构问题? 为什么链接不到usr/src/linux2.4.20/inclu [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-03-31 09:50 |只看该作者 |倒序浏览
源程序:
#define _NO_VERSION
#include <linux/module.h>
#include <linux/config.h>
#include <linux/version.h>
#include <asm/uaccess.h>
char kernel_version[] =UTS_RELEASE;
#define KERNEL
#include <linux/types.h>
#include <linux/fs.h>
#include <linux/mm.h>
#include <linux/errno.h>
#include <asm/segment.h>
#define SUCCESS 0
#define DEVICE_NAME "char_dev"
static int Device_Open=0;
unsigned int test_major=0;
static int open_test(struct inode *inode,struct file *file){
       
        #ifdef DEBUG
       
                printk("device_open(%p)\n",file);
       
        #endif
       
        if(Device_Open)
               
                return -EBUSY;
       
        Device_Open++;
       
        MOD_INC_USE_COUNT;
       
        return SUCCESS;

}
static int release_test(struct inode *inode,struct file *file){
       
        #ifdef DEBUG
       
                printk("device_release(%p,%p)\n",inode,file);
       
        #endif
       
        Device_Open--;
        MOD_DEC_USE_COUNT;
        return 0;
}
static ssize_t read_test(struct file *file,char *buf,size_t count,loff_t *f_pos){
        int left;
        if (verify_area(VERIFY_WRITE,buf,count) == -EFAULT )
                return -EFAULT;
        for(left = count ;left > 0;left--)
        {         _put_user(1,buf);
                buf++;
        }
        return count;
}
static struct file_operations tdd_fops = {
        read:read_test,
        openpen_test,
        release:release_test,
};
int init_module(void)
{
        int result;
        result = register_chrdev(0, "char_dev", &tdd_fops);
        if (result < 0) {
                printk("char_dev: can't get major number\n";
                return result;
        }
        if (test_major == 0)
                test_major = result; /* dynamic */
       
                printk("Hello,I'm in kernel mode\n";
        return 0;
}
void cleanup_module(void)
{
        printk("<0>""Hello,I'm going to out\n";
        unregister_chrdev(test_major,"test";
}  
编译命令:gcc -D_KERNEL_ -DMODULE -DLINUX -I/usr/src/linux-2.4.20-8/include -c -o CharDriver.o CharDriver.c
结果:
CharDriver.c: At top level:
CharDriver.c:17: warning: `struct inode' declared inside parameter list
CharDriver.c:36: warning: `struct file' declared inside parameter list
CharDriver.c:36: warning: `struct inode' declared inside parameter list
CharDriver.c:48: warning: `struct file' declared inside parameter list
CharDriver.c:58: variable `tdd_fops' has initializer but incomplete type
CharDriver.c:59: unknown field `read' specified in initializer
CharDriver.c:59: warning: excess elements in struct initializer
CharDriver.c:59: warning: (near initialization for `tdd_fops')
CharDriver.c:60: unknown field `open' specified in initializer
CharDriver.c:60: warning: excess elements in struct initializer
CharDriver.c:60: warning: (near initialization for `tdd_fops')
CharDriver.c:61: unknown field `release' specified in initializer
CharDriver.c:61: warning: excess elements in struct initializer
CharDriver.c:61: warning: (near initialization for `tdd_fops')
CharDriver.c:58: storage size of `tdd_fops' isn't known
我的linux为Red Hat linux 9,我认为这里出现上述的问题主要是因为链接到了/usr/include/linux/fs.h

论坛徽章:
0
2 [报告]
发表于 2012-04-26 08:47 |只看该作者
支持楼上的看法

论坛徽章:
0
3 [报告]
发表于 2012-04-28 15:14 |只看该作者
单位的机房一直要找个网管软件,我就采纳楼上建议用了美信云网管,配置操作挺简单的,
还是免费的,就是希望监测可以在全面点,就完美了。、

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP