背景:RK3288 MIPI OV摄像头 V4L2框架
一.RK MIPI
二.V4L2框架
现在,从设备树开始,分析video0是如何构建起来的。
rk3399-linux.dtsi: compatible = "rockchip,rk3399-cif-isp";在驱动目录下查找rockchip,rk3399-cif-isp
在media/platform/rk-isp10/cif_isp10_v4l2.c-->cif_isp10_v4l2_of_match找到。所以,我这个rk3399 sdk版本下摄像头走rk-isp v4l2框架。
cif_isp10_v4l2_drv_probe
-->match = of_match_node(cif_isp10_v4l2_of_match, node); 找到设备树上的cif_isp1: cif_isp@ff920000节点,该节点内容见附录。
-->cif_isp10_create 构建ISP
-->cif_isp10_pltfrm_soc_init 初始化ISP
-->cif_isp10_img_srcs_init 初始化图像源设备(摄像头)
-->cif_isp10_pltfrm_get_img_src_device 查找ISP10下cif接口的图像源设备
-->phandle = of_get_property(node, "rockchip,camera-modules-attached", &size);
//根据该节点内容可知,这里就通过rockchip,camera-modules-attached找到camera4了
-->client = of_find_i2c_device_by_node(camera_list_node);
-->img_src_array[num_cameras] = cif_isp10_img_src_to_img_src(&client->dev, &(cif_isp10_dev->soc_cfg));
-->cif_isp10_img_src_ops[i].ops.to_img_src
-->cif_isp10_img_src_v4l2_i2c_subdev_to_img_src //至此核心层就能和摄像头设备驱动绑定了
-->i2c_get_clientdata
--> v4l2_subdev_call(subdev, core, ioctl, PLTFRM_CIFCAM_ATTACH, (void *)soc_cfg);
-->ov_camera_module_ioctl-->ov_camera_module_init
-->ov_camera_module_attach-->"custom->check_camera_id(cam_mod)"
//将从phandle遍历出来的i2c设备中找到符合条件的client,并将client和当前ISP绑定。
-->cif_isp10_v4l2_register_video_device
-->vdev->ioctl_ops = ioctl_ops; 使用最后一个参数作为和上层交互的ioctl
-->video_register_device 在这里将/dev/videox注册上
-->g_cif_isp10_v4l2_dev[g_cif_isp10_v4l2_dev_cnt] =cif_isp10_v4l2_dev; //将设置、注册好的ISP加入核心层中。
引自:(202条消息) rk3399调试ov2659(camera模块@dvp接口)–源码分析_黄进发的博客-CSDN博客_rk3399 v4l2 这个兄弟分析的很透彻
三.实现
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/38163.html