主题 : tiny6410+ cam130+2.6.38内核,如何应用内存映射的方式操作cam130 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
楼主  发表于: 2011-04-26 14:38

 tiny6410+ cam130+2.6.38内核,如何应用内存映射的方式操作cam130

在2.6.28内核下对cam130进行操作,程序一点问题没有,可以正常采集摄像头数据,换到2.6.38这个版本的时候,驱动发生了变化,友善对于这个版本的cam130摄像头驱动不开源,找不到程序是哪里出错了,在执行ioctl(fd, VIDIOC_QUERYBUF, &dev.buffer)到这里时,返回小于0的值,错误提示说参数错误,不知道为什么会这样,有用过的吗?支个招
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
1楼  发表于: 2011-04-26 18:41
不是,其实是那个ov9650cmos摄像头
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
2楼  发表于: 2011-04-27 14:02
的确可以正常工作,这个我知道,但这个是用的overlay的模式,采集图像比较慢,我想用capture的模式,通过内存映射的方式来读取摄像头的信息,但在操作时,按平时操作一般摄像头的步骤来操作,就会出错
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
3楼  发表于: 2011-04-27 21:21
最新的API我看过了,它的实现方式我也看了,在实现 VIDIOC_QUERYBUF这个命令的ioctl函数中,它与2.6.28是没有什么区别的,也就是说还是在ov9650的驱动部分,在实现这个查询功能函数处即实现vidioc_querybuf这个功能函数处有相应的设置,是我没设对,但由于没有开源的源码,我也不知道该如何设置,友善之臂是否可对出一个对这些不开源的驱动的使用文档呢?
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
4楼  发表于: 2011-04-28 14:19
2.6.28和2.6.38的内核代码关于v4l2的我都看了,它们实现方式是相同的,为什么在2.6.28内核程序运行正常,而在2.6.38下面就不行呢?出错的地方就是这个地方,调试一下内核看看吧
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
5楼  发表于: 2011-05-02 14:38
今天终于有时间进行测试,上午调试了一下,问题找到了,在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命令时出现错误,还不明白原因,有待进一步解决。
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
6楼  发表于: 2011-05-02 20:03
VIDIOC_S_CTRL对于这个命令的操作是正常的,刚出现的错误发现是程序的问题,目前摄像头工作完好,呵呵,建议友善官方把OV9650的驱动改一下,或者按我方法把V4L2部分的内容稍作修改,这样大家用起来也就不会遇到我这个麻烦了,呵呵
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
7楼  发表于: 2011-05-07 21:14
是的
级别: 新手上路
UID: 19251
精华: 0
发帖: 35
金钱: 180 两
威望: 36 点
贡献值: 0 点
综合积分: 70 分
注册时间: 2010-04-17
最后登录: 2016-06-12
8楼  发表于: 2011-05-17 08:32

 回 14楼(succu) 的帖子

改成多少了,我只改了这一个地方,其它的地方不用动,改这个就是在进行内映射时起作用