copy_to_user工作,memcpy失败

时间:2014-02-01 11:47:05

标签: c kernel memcpy

我在sh4-arch linux 2.6.32上为设备编程,他从UDP套接字播放视频流。 我在用户空间(称为ubuffer)中有一个解码器(内核空间)读取的环形缓冲区。 ubuffer是从内核空间缓冲区(称为kbuffer)映射的。

现有应用程序(带源代码)将数据从UDP套接字读取到用户空间中的ubuffer。为了减少延迟,我创建了一个驱动程序,它将UDP sk_buf中的有效负载数据直接读取到环形缓冲区。现在我正在使用来自现有应用程序的ioctl,它为每个UDP数据包发送一个ubuffer到ioctl_procioctl_proc制作copy_to_user(ubuffer+off, skb->data+skb_off, len)并且一切正常。我需要在没有任何用户空间应用程序和ioctl的情况下完成它。所以我已将kbuffer发送给我的驱动程序,并使用相同的参数制作memcpy(kbuffer+off, skb->data+skb_off, len)而不是copy_to_user(这是唯一的区别)并且它不起作用:我看到的图片有10个有效像素的百分比(一些文本和颜色),但休息失败。如果kbuffer错了,我将看不到任何正确的东西,但我看到了一些东西。 len的值大约为100-1300字节。

我做错了什么?也许我必须使用一些与页面对齐的调用?

0 个答案:

没有答案