ov9650学习(2)

ov9650 同时被 2 个专栏收录
3 篇文章 0 订阅
19 篇文章 1 订阅


已经在2.6.24的内核将飞凌公司提供的ov9650的驱动和测试源码运行成功,不过之前那个天嵌提供的驱动和测试程序还没调通,先mark一下吧。

10月8号更新了第3篇文章实现了解决了很多第1,2篇中的问题:http://blog.csdn.net/liuzijiang1123/article/details/48970623 


具体实现:


代码放在了这里http://git.oschina.net/cw_lzj/ov9650

还有一些jpeg的动态库文件我没放上去。


关于jpeg库的编译和移植 参考这个博客http://blog.sina.com.cn/s/blog_68282f2e0102uyeo.html

在编译测试程序的时候如果出现了这个错误


函数有一点小错误,我已经改过了。


前面要加上一个*号,因为强制转换为指针,但是后面赋值的是一个整数,所以需要用*取这个指针的值。


编译的时候首先把头文件放到当前目录下,然后在配置文件中加入jpeg库的路径 sudo vim /etc/profile


然后进行编译

 ~/arm920t/arm-linux-gcc testcamera.c -ljpeg


更新 2016/4/20:

今天从新在自己虚拟机上编译还是发现找不到动态库


解决方法是将交叉编译好的动态库放到/opt/buildroot-2012.08/arm920t/usr/arm-unknown-linux-uclibcgnueabi/lib 下去即可


这里大家可以了解一下编译的时候 -l -L -i这些选项http://blog.csdn.net/zqt520/article/details/7727051 


第一次运行的时候出现了这个:


这个原因是我的fb_info参数没设置对


具体为什么要这样我也不清楚,应该是上面这样。


当你删除驱动的时候可能会出现这个问题


解决方法就是,在lib目录下创建这个文件即可:rmmod s3c2440a_camif


可以讲讲我是如何发现的:一开始出现这个错误我以为是摄像头接口的寄存器没配置好或者是ov9650的寄存器没配置好,换了几组寄存器的配置后发现还是这样,然后我就想到是不是屏的原因,但是我发现我的logo(小企鹅)在屏上是正常的,只有一个,没有出现多个的现象,然后我就用到了fb操作中画线的操作的那个程序,当它运行的时候就出问题了,发现也出现了偏移,后来我再去看我的lcd屏的信息,就发现上面这个错误了,改过来后就好了! (正常的情况下企鹅应该在左上角,而我的那个企鹅是出现在右上角的,我当时没发现)


还有一个小问题:我摄像头驱动里面设置的屏幕大小是480*272这个是拍摄出来的图片的大小么?因为原来摄像头驱动是320*240的,我改和没改从lcd里面看都没差,这个就是datasheet里面的那个窗口的大小设置,我还是不明白,因为我是4.3的屏,所以我是这样设的,发现从摄像头里看起来都没差,只是捕捉图片会发现是480*272的。


上面是代码修改和编译的工作,看似就几步,但是也要下功夫的。

****************************************************************************************************************************************************************************************

然后我再说说自己对摄像头数据流向的理解

ov9650摄像头采集数据(原始图像)-------------->摄像头接口(接收)----------->DMA通道------------>帧存储器SDRAM

****************************************************************************************************************************************************************************************


  原始数据传过来,然后如果你想到使用哪个通道就配置哪个通道的寄存器,例如我用的P通道,就配置它的寄存器,将我们的原始数据转换为RGB格式然后再通过DMA把数据传到我们的帧存储器中。如果对存储器中的数据进行操作的话就将编码DMA的RGB的第1(2,3,4)帧开始地址赋值给我们的buffer。

    iowrite32(img_buff[0].phy_base, S3C244X_CIPRCLRSA1); //预览DMA RGB第一帧开始地址
    iowrite32(img_buff[1].phy_base, S3C244X_CIPRCLRSA2); //2
    iowrite32(img_buff[2].phy_base, S3C244X_CIPRCLRSA3); //3
    iowrite32(img_buff[3].phy_base, S3C244X_CIPRCLRSA4);// 4



上面是我对整个摄像头的数据流向的理解(这个是参考天嵌的驱动)




不过对于飞凌的驱动我对数据的流向就不太理解了,因为它加V4L
 
加入了V4L是把它注册了V4L的设备?(因为开发板中设备名称变成了video),然后数据是通过v4l的api来操作的么?

今天又开了一些文章,我觉得数据流向还是跟我以前分析的那样,数据还是在内存中,只不过v4l用了mmap来讲这段内存映射到了用户空间,用户空间再mmap来找到这个映射,就能直接操作这段内存,节约了很多数据拷贝的时间。 

这个是整个驱动的fops

 static struct file_operations  cam_ops =
   {
       .open     = v4l_cam_open,
       .release    = v4l_cam_release,
       .read     = v4l_cam_read,
       .ioctl    = v4l_cam_ioctl,
       .poll     = v4l_cam_poll,
       .mmap     = v4l_cam_mmap,
   }; 

V4L2支持两种方式来采集图像:内存映射方式(mmap)和直接读取方式(read)。

V4L2支持内存映射方式(mmap)和直接读取方式(read)来采集数据,前者一般用于连续视频数据的采集,后者常用于静态图片数据的采集.

http://blog.chinaunix.net/uid-26101960-id-3297657.html

http://blog.chinaunix.net/uid-11765716-id-196071.html

这2篇文章是介绍v4l2比较好的一篇文章。


这篇是v4l的,对于我们的测试程序理解还是有帮助的,比较飞凌用的是v4lhttp://blog.csdn.net/wangrunmin/article/details/7766221

本人能力有限,目前对于这个的学习难度还是很大的。

我对于加入了v4l后数据流向的理解是将我们的dma缓冲区通过mmap映射到了用户空间,然后用户空间再利用这一段内存将其显示到LCD上,具体怎么实现我不会(应该是通过V4L里面的ioctl来实现的吧)。


内核中的mmap比较复杂,还要牵扯到vma,这里真的是深水区。我目前还不明白。


**********************************************************************************************************************************************************

V4L的视频流数据读取:

首先,打开视频设备文件,进行视频采集的参数初始化,通过V4L接口设置视频图像的采集窗口、采集的点阵大小和格式;

其次,申请若干视频采集的帧缓冲区,并将这些帧缓冲区从内核空间映射到用户空间,便于应用程序读取/处理视频数据;

第三,将申请到的帧缓冲区在视频采集输入队列排队,并启动视频采集;

第四,驱动开始视频数据的采集,应用程序从视频采集输出队列取出帧缓冲区,处理完后,将帧缓冲区重新放入视频采集输入队列,循环往复采集连续的视频数据;

第五,停止视频采集。

************************************************************************************************************************************


还是总结一下吧(感觉自己说得太乱了):

 首先前面数据流向还是一样的,就是后面加入了v4l后,dma中的数据去哪了,我目前觉得是把它重新申请了一个区域,然后应用程序再来操作这个空间的数据。


对于飞凌的驱动我就不再多说了,因为越看下去感觉自己好多都不懂,确实现在能力不够,要想明白整个驱动,必须得了解内核的内存管理机制,mmap, dma,v4l,中断,poll机制.....................还有关于yuv rgb互相转化等很多相关专业知识。目前通过这个小项目明白了自己的太多不足,如果想从事底层驱动相关的工作,必须得知道这些东西。











  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

Muscle_Mliu

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值