求教,求助,急求··· PCI 设备驱动问题!
本人最近接了个PCI 驱动,在驱动中通过 ioread32()能将设备地址读取出来,并且能拷贝至内核的缓存区 unsigned long rec_buff;下一步通过上层的read函数,file_operations 系统调用接口的ssize_tmy_read(struct file *fp,char *buff, ssize_t len, loff_t *off)
函数进行读取,想将缓存区rec_buff的数据拷贝至 该出上层接口 char *buff 中;
部分代码如下:
unsigned long rec_buff;
//全局缓存区
ssize_tmy_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的数据就不行了,网各位大侠给小弟指点啊·····
ioread32()能将映射出来的PCI 设备的基地址bar(0)空间数据读取出来(设备指带FPGA芯片的pci卡设备),该数据就是读取的FPGA内的数据,为0x06060707的十六进制数,我已经将该数据拷贝至缓存区内核的缓存区 unsigned long rec_buff中了,并验证过,该缓存区内已经有数据,打印出来正是0x06060707的十六进制数。
现在的问题是,通过系统调用,将该缓存区内的数据传送至上层用户态程序读函数ssize_t read()的接口char *buff。无论是用memcpy() 或者是copy_to_user()都不行···郁闷中啊!
各位大侠给棒棒忙啊···· 是不是你的测试程序有问题,或者你的copy_to_user的头文件是不是你现在所用的平台下的。
页:
[1]