各个平台camera驱动编写注意事项

各个平台camera驱动编写注意事项

camera驱动开发
1)另外注意,在imx6平台中,4.1.15kernel版本的代码,mxc的mxc_v4l2_capture.c camera主控制器和ov5642.c的sensor驱动之间,通过v4l2-int-device.h和v4l2-int-device.c中的master和slave注册attach连接的方式来关联,关联后,master(camera isp主控制器)通过ioctl来控制slave(sensor)。master和slave只有struct v4l2_int_ioctl_dest的ioctl的交互,这些交互包括init、power控制、g_fmt_cap、g_s_parm、g_ctrl等等。slave sensor驱动也仅仅是实现这些ioctl功能即可。
2)然而高通平台和mtk平台并没有使用v4l2-int-device.c的方式和sensor驱动通信。高通平台的msm isp以v4l2_subdev的形式出现,参见msm_isp.c公共文件和具体的msm_isp47.c版本。高通的msm_sensor.c以subdev的形式出现(见msm_sd_register()),然后各个具体的camera sensor则是以msm_sensor_platform_probe(struct platform_device*, const void *data),其实data是struct msm_sensor_ctrl_t类型来传入个msm_sensor.c作为回调。
3)mtk平台目前没有看到他是否使用了v4l2的框架。
虽然每个平台的接口有区别,要求你提供的驱动代码框架有一定区别,但是可以从平台中找个参考的驱动去实现。例如摄像头ov5640驱动,例如imx6的drivers/media/platform/mxc/capture/ov5640.c或者ov5640_mipi.c。例如参考ov5640_mipi.c来实现pr2000k_mipi.c驱动。
另外:一个视频捕获驱动对进入的视频流有两种工作模式: Preview模式(非overlay模式)和overlay模式。 别的地方叫法不同。overlay模式可能叫preview模式。

另外参见
https://blog.csdn.net/gaoneil/article/details/88133539

具体请参考我的免费的linux各种驱动开发课程如下:
https://edu.51cto.com/course/17138.html

另外我的相关培训视频请看:
欢迎观看我发布的各个课程: https://edu.51cto.com/lecturer/8896847.html

猜你喜欢

转载自blog.csdn.net/gaoneil/article/details/88661443