IMX6Q camera 驱动总结( 1 )

Posted coversky

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IMX6Q camera 驱动总结( 1 )相关的知识,希望对你有一定的参考价值。

---恢复内容开始---

1 先从应用程序入手看看应用流程对驱动做了哪些事情

技术图片

 

这个首先对传入的 参数做了处理,用来重写驱动默认给的参数

技术图片

 

这里先打开/dev/video3 ,这个设备节点是由驱动创建的。

 技术图片

 

该函数是一个设置参数的过程,内核接收一些结构体改变自己默认参数

 技术图片

 

首先进行一个查询能力的函数,传入struct v4l2_capability 这个结构体里面,驱动会设置这个结构体。

 技术图片

 

如驱动代码所示,这个设备有多个能力,首先是个视频输入设备,还可以进行视频叠加,支持系统IOCTL控制,支持系统调用IO读写。

 技术图片

 

 技术图片

 

 

 

接着使用VIDIOC_S_INPUT传入了一个参数到驱动,应用程序给的1,那么看驱动做了什么处理。

 技术图片

 

这个是一个选择数据流向内存的一个路由,驱动框架定义了两个流向,一个是

“CSI IC MEM”  一个是  “CSI MEM”,第一个需要经过IC的处理到内存,另外一个不需要

如驱动代码所示,我们传入的参数为1,于是选择了第一个流向,其中最重要的是.name 用来进行strcmp匹配。

 

 

 

技术图片

 

技术图片

 

接着

技术图片

 

设置这个结构体为视频捕获设备类型,否则驱动会返回错误,

技术图片

 

驱动将cam_data的crop_bounds和crop_defrect值传给应用层传来的结构体,驱动的crop_current是根据具体设备来的是设备相关驱动做的,然后传给框架驱动的。

然后根据设备驱动传来的defrect值传给crop.c 接着调用VIDIOC_CROPCAP命令字根据

具体设备的v4l2_crop值进行判断,校验合适后写入寄存器。

技术图片

 

这里的红色框是写入真实寄存器的,用来设置csi的窗口大小和位置

 

 

 

接着

 技术图片

 

 技术图片

 

 技术图片

 

 

 

 

驱动同样以一个struct v4l2_format *sf接受,调用mxc_v4l2_s_fmt函数

在应用传给驱动的结构体struct v4l2_format fmt ,width是0,height是0,pixformat

是UYVY格式,但是在接下来的过程中,还是会被设备驱动定的cam_data值覆盖。

 

 技术图片

 

 

 

 

接着

技术图片

 

这个是很重要的一步,为摄像头发来的数据分配内存,

 技术图片

 

 

 技术图片

 

分配内存最核心的API是 dma_alloc_coherent

函数,分配好之后,将内存地址赋值给

cam->frame[i].vaddress这个虚拟地址

 

 

 

 

 

 

 

 

至此设置部分完毕。

接着

技术图片

 

这里又打开了另外一个设备结点/dev/mxc_ipu,这个是与底层数据传输相关的节点

技术图片

 

又打开了一个framebuffer设备,用于显示,可以是HDMI也可以是LCD屏,然后对此设备进行显示设置。

技术图片

 

这个是正式开启Camera进行数据传输的函数

最终会调用

 技术图片

 

 

最终驱动会调用mxc_streamon

技术图片

 

=================================================================================

 

 

---恢复内容结束---

以上是关于IMX6Q camera 驱动总结( 1 )的主要内容,如果未能解决你的问题,请参考以下文章

迅为IMX6Q开发板提供原理图_底板PCB_驱动程序源码_芯片和LCD数据手册_开发板环境_使用手册

IMX6Q RTC驱动分析

imx6q 添加intel PCIE网卡

高通Camera 驱动调试要点

迅为IMX6开发板提供原理图丨底板PCB丨驱动程序源码丨芯片丨LCD数据手册丨开发环境丨产品使用手册

Camera知识体系架构之驱动&应用&调试学习笔记-以瑞芯微RV1109为例