3395|0

80

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

编译驱动模块后,导入出现问题,请解决! [复制链接]

我写了一个虚拟的字符驱动,编译没有问题,可是作为模块导入时,却出现如下的错误提示:
unresolved symbol DECLARE_WAIT_QUEUE
下面是源码,请帮忙找一下原因,谢谢!

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

#define test_major 253

MODULE_LICENSE("GPL");

static ssize_t test_read(struct file *,char *,size_t,loff_t *);
static ssize_t test_write(struct file *,const char *,size_t,loff_t *);
static int __init test_init(void);
static void __exit test_exit(void);
static wait_queue_head_t outq;
static wait_queue_t wait;
static int head=0,tail=0;
static char buf[10];

struct file_operations test_fops=
{
read:test_read,write:test_write,
};


static int __init test_init(void)
{
        int ret;
        ret=register_chrdev(test_major,"test",&test_fops);
        if(ret)
        {
                printk("test_dev register failed!!!\n");
        }
        else
        {
        printk("test_dev register success!!!\n");
        init_waitqueue_head(&outq);
        }
        return ret;
}

static void __exit test_exit(void)
{
        unregister_chrdev(test_major,"test");
}

static ssize_t test_read(struct file *filp, char *buf1,size_t count,loff_t *off)
{
  DECLARE_WAIT_QUEUE(wait,current);
  char out_data;
        if(head==tail)
        {
                if(filp->f_flags && O_NONBLOCK)
                {
                        return -EAGAIN;
                }
                add_wait_queue(&outq,&wait);
                current->state=TASK_INTERRUPTIBLE;
                while((head==tail)&&!signal_pending(current))
                {
                        schedule();
                        current->state=TASK_INTERRUPTIBLE;
                }
                if(head==tail)
                {
                        return count;
                }
                current->state=TASK_RUNNING;
                remove_wait_queue(&outq,&wait);
                out_data=get_bufdata();
                if(copy_to_user(buf1,&out_data,sizeof(out_data)));
                        return -EFAULT;
        }
        return count;
}

static char get_bufdata(void)
{
        int last;
        last=tail;
        if(++tail==10)
                tail=0;
        return buf[last];
}

static ssize_t test_write(struct file *filp, const char *buf1,size_t len,loff_t *off)
{
  buf[head]=buf1;
  if(++head==10)
  head=0;
  wake_up_interruptible(&outq);//唤醒等待队列
  return sizeof(char);
}

module_init(test_init);
module_exit(test_exit);
点赞 关注

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表