今天终于有时间进行测试,上午调试了一下,问题找到了,在long video_ioctl2(struct file *file, unsigned int cmd, unsigned long arg)函数实现时,将由用户空间传进来的arg的内容,赋值于内核临时开僻的parg空间时,unsigned long n = cmd_input_size(cmd);n取值只取了从struct v4l2_buffer结构开始到type字段的大小,struct v4l2_buffer结构type字段后面的内容丢失掉了,而在ov9650驱动中实现vidioc_querybuf(file, fh, p)函数时,应该要对memory字段进行判断,因此,当我们在应用程序当中对这一字段设置为V4L2_MEMORY_MMAP时,会因为n的传太小,造成这一部分内容丢失,由此传给vidioc_querybuf(file, fh, p)函数时,其值为0,返回错误。修改后摄像头正常工作,但是又遇到了另一个问题,如何对摄像头的参数进行设置,当调用VIDIOC_S_CTRL命令时出现错误,还不明白原因,有待进一步解决。