FIMC驱动实现V4L2框架与ov5640摄像头驱动——iTop4412平台

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Shaiwei/article/details/88417434

FIMC驱动框架与ov5640摄像头驱动——iTop4412平台


一、i2c设备与驱动注册

    ov5640摄像头的i2c由设备和驱动两部分构成,设备注册和驱动注册。先说不同一般i2c设备注册部分,在平时我们添加i2c设备时,需要修改平台文件(.../iTop4412_Kernel_3.0/arch/arm/mach-exynos/mach-itop4412.c)在对应I2C总线的结构体下面添加项,例如在第七条总线下面添加设备。

然后会统一注册该总线下的所有设备。

这样就完成了I2C设备的注册(i2c_client),然后编写相应的驱动文件注册i2c_driver就可以完成i2c总线的初始化操作。

但在摄像头驱动中i2c却并不是这么注册的,摄像头驱动使用的V4L2框架,是作为V4L2的一个子设备,在申请调用/dev/video*时完成摄像头i2c设备的注册等操作。而iTop4412集成FIMC,那么相比以前的2440等Soc,在摄像头驱动和V4L2之间又增加了FIMC层,FIMC实现了V4L2框架的一些接口函数,而在FIMC中向下调用,实现对摄像头(ov5640)的操作。相关i2c注册流程大致如此.

1、i2c设备注册

(1)增加摄像头设备信息,图像像素,在这里可以理解为什么我们在调用摄像头设备时,需要写参数640X480。

(2)增加i2c摄像头设备结构体,名称和设备地址。


 

(3)增加平台摄像头结构体,并在结构体中引用I2C摄像头结构体。

从该结构体(ov5640)中也容易看出该摄像头的一些设备信息。例如:所使用的I2C总线号-7,设备类型CAM_TYPE_ITU,像素格式ITU_601_YCBCR422_8BIT,时钟频率24000000等等。

(4)注册平台fimc数组

(5)接下来所做的就是注册s3c_platform_fimc数组中的一系列结构体了。该数组中的设备项最终会在FIMC设备注册、初始化时被一一申请注册,当然,前提是在menuconfig中选中了设备对应的项。因为FIMC是完成V4L2框架的一些操作,对应的操作函数很多,我们先来针对ov5640设备,查看i2c设备注册部分。

    在fimc_dev.c文件的 fimc_probe()中调用fimc_init_global()函数,并在调用之后,获得摄像头的一些列信息。fimc_capture.c文件的 fimc_s_input()函数中调用fimc_configure_subdev()函数,根据获得的信息会去注册i2c设备。

可以看出在v4l2_i2c_new_subdev_board()函数中完成对摄像头i2c设备的注册。

至此一个摄像头的i2c设备就注册完成了。

问题来了,是谁调用的 fimc_s_input()函数呢?通过在工程中寻找该函数,容易发现该函数是在fimc_v4l2_ops结构体中。

而该结构体类型又是v4l2_ioctl_ops结构体,所以其必然属于video_device类型的fimc_video_device结构体。

至此,可以清楚的发现FIMC作为video设备,向上完成了v4l2接口,向下提供了摄像头的驱动操作。可以理解为,一个摄像头作为FIMC设备的一部分,完成了FIMC设备的视频或图像采集功能,而FIMC又向上完成了video_device设备的一系列功能,当我们在打开一个摄像头设备节点/dev/video*设备时,调用过程恰好是相反的。当然集成在4412中的FIMC模块还有很多功能,图像采集只是其中的一部分。

2、i2c驱动注册

     ov5640的驱动注册主要在ov5640.c文件中,注册过程和一般的i2c驱动注册并无本质区别。

至此就完成了ov5640摄像头的i2c操作部分。

参考博客:

https://blog.csdn.net/wh_19910525/article/details/18091915
https://blog.csdn.net/ke123456le/article/details/9851429#
https://blog.csdn.net/hktkfly6/article/details/51925348
https://blog.csdn.net/a1028732302/article/details/43689783
https://blog.csdn.net/yiheng528/article/details/17841039

*******疑问:那个ov5640_cym.c文件有什么作用?

二、V4L2框架

猜你喜欢

转载自blog.csdn.net/Shaiwei/article/details/88417434