免费注册 查看新帖 |

Chinaunix

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

Linux驱动中的write设备方法 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-06-27 16:08 |只看该作者 |倒序浏览
本帖最后由 山丘之王MK 于 2013-06-27 16:09 编辑

最近在写一个驱动,在write设备方法中,将用户空间的数据buf传送到内核空间的data1数组中,发现在应用程中调用write失败,返回-1,也就是根本没执行内核中的write设备方法,而read却是成功的。代码如下:
static ssize_t my522_write(struct file *filp, const char __user *buf, size_t size, loff_t *ppos)
{
  unsigned long p =  *ppos;
  unsigned int count = size;
  int ret = 0;
printk(KERN_INFO"TEST WRITE\n");  //用来测试有没执行my522_write,发现根本没执行。用户空间中调用write返回-1。
  if (copy_from_user((void *)data1,buf,count))
   {
      
      printk(KERN_INFO"copy from user wrong!\n");
      ret =  - EFAULT;
}
  else
  {
     
   
    printk(KERN_INFO "written %d bytes(s) from %d\n", count, p);
  }

  return ret;
}

论坛徽章:
0
2 [报告]
发表于 2013-06-27 16:10 |只看该作者
write调用失败的原因有哪些呢?

论坛徽章:
0
3 [报告]
发表于 2013-06-27 16:15 |只看该作者
可以把代码都贴出来吗(包括用户态的)

论坛徽章:
0
4 [报告]
发表于 2013-06-27 22:08 |只看该作者
问题找到了,用户程中以RDONLY方式open的,导致不能写。回复 3# wwxxxxll


   

论坛徽章:
0
5 [报告]
发表于 2013-06-28 09:08 |只看该作者
恭喜!回复 4# 山丘之王MK


   

论坛徽章:
3
卯兔
日期:2013-08-26 22:14:57未羊
日期:2013-09-08 19:16:05未羊
日期:2014-10-23 10:34:12
6 [报告]
发表于 2013-07-21 23:46 |只看该作者
            
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP