免费注册 查看新帖 |

Chinaunix

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

求教,求助,急求··· PCI 设备驱动问题! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-03-20 13:25 |只看该作者 |倒序浏览
本人最近接了个PCI 驱动,在驱动中通过 ioread32()能将设备地址读取出来,并且能拷贝至内核的缓存区 unsigned long rec_buff[16];
下一步通过上层的read函数,file_operations 系统调用接口的ssize_t  my_read(struct file *fp,char *buff, ssize_t len, loff_t *off)
函数进行读取,想将缓存区rec_buff[16]的数据拷贝至 该出上层接口 char *buff 中;


部分代码如下:

unsigned long rec_buff[16];
//全局缓存区


ssize_t  my_read(struct file *fp,char *buff, ssize_t len, loff_t *off)
{
memcpy(buff,rec_arry,16);

copy_to_user(budff,rec_arry,16);
return len;
}

以前在DSP板卡上该函数都能正常运行,换了FGPA的PCI板子后,红字部分这两句都拷贝不成功,死活都拷贝不过来,如果直接定义一个字符串,或者直接给字符串拷贝,是成功的,但是就是拷贝缓冲区rec_buff[16]的数据就不行了,网各位大侠给小弟指点啊·····



ioread32()能将映射出来的PCI 设备的基地址bar(0)空间数据读取出来(设备指带FPGA芯片的pci卡设备),该数据就是读取的FPGA内的数据,为0x06060707的十六进制数,我已经将该数据拷贝至缓存区内核的缓存区 unsigned long rec_buff[16]中了,并验证过,该缓存区内已经有数据,打印出来正是0x06060707的十六进制数。

现在的问题是,通过系统调用,将该缓存区内的数据传送至上层用户态程序读函数ssize_t read()的接口char *buff。无论是用memcpy() 或者是copy_to_user()都不行···郁闷中啊!

各位大侠给棒棒忙啊····

论坛徽章:
0
2 [报告]
发表于 2013-03-30 22:14 |只看该作者
是不是你的测试程序有问题,或者你的copy_to_user的头文件是不是你现在所用的平台下的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP