![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
v4l2 video 实例分析
文章平均质量分 54
基于RV1126平台imx291分析
dianlong_lee
普通造bug码农一枚。。。
展开
-
基于RV1126平台imx291分析 --- 总结
Linux v4l2架构学习总链接回顾了一下之前的分析,发现media_device的interface和entity_notify都没有分析,这些以后有机会再分析吧。这个系列的分析,后面遇到新的知识点,还会继续更新。基于RV1126平台imx291分析就写到这里吧,继续去阅读代码。...原创 2021-04-22 15:57:46 · 1442 阅读 · 5 评论 -
基于RV1126平台imx291分析 --- 运行设备(VIDIOC_STREAMON)
Linux v4l2架构学习总链接video相关注册看这篇文章基于RV1126平台imx291分析 --- video rkcif_mipi注册这里不会分析调用过程,只给出一个最终函数rkcif_start_streaming这里提一下vb2_core_streamon这个函数int vb2_core_streamon(struct vb2_queue *q, unsigned int type){ ... if (q->queued_count >=原创 2021-04-22 11:24:26 · 4280 阅读 · 17 评论 -
基于RV1126平台imx291分析 --- v4l2_pipeline_pm_use
Linux v4l2架构学习总链接花了一个entity的链接简图,忽略了link其中彩色线条是enable的,黑线是disable使用上面的图来分析 v4l2_pipeline_pm_use,从stream_cif_mipi_id0这个entity开始 v4l2_pipeline_pm_use(&vnode->vdev.entity, 1);v4l2_pipeline_pm_use()int v4l2_pipeline_pm_use(struct media_.原创 2021-04-20 14:41:26 · 1531 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- open及media graph分析
Linux v4l2架构学习总链接基于RV1126平台imx291分析 --- 先研究media再分析应用调用文章中一开始就被media相关的吓退了。一星期的时间去研究media相关知识,现在终于可以动手了rkcif_fh_open()static int rkcif_fh_open(struct file *filp){ struct video_device *vdev = video_devdata(filp); struct rkcif_vdev_node *vnode =原创 2021-04-20 10:51:58 · 2816 阅读 · 3 评论 -
基于RV1126平台imx291分析 --- media部件连接 四
Linux v4l2架构学习总链接基于RV1126平台imx291分析 --- media部件连接 一之前说过rkcif_mipi的entity是在complete中操作的,这里分析completestatic int subdev_notifier_complete(struct v4l2_async_notifier *notifier){ struct rkcif_device *dev; struct rkcif_sensor_info *sensor; int ret,原创 2021-04-16 10:37:10 · 1330 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件连接 三
Linux v4l2架构学习总链接二,mipi csi phy与imx291同样的还是直接贴出bound函数static introckchip_mipidphy_notifier_bound(struct v4l2_async_notifier *notifier, struct v4l2_subdev *sd, struct v4l2_async_subdev *asd){ struct mipidphy_priv *priv = container_of(n原创 2021-04-15 16:01:09 · 1000 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件连接 一
Linux v4l2架构学习总链接entity之间什么时候创建连接?怎么连接?这就要牵扯到subdev注册这部分了看下面2篇文章基于RV1126平台imx291分析 --- rkcif_mipi注册v4l2_async_subdev_notifier_register 分析在函数v4l2_async_notifier_try_all_subdevs中,会从subdev_list上找到sd和当前设备notifier->waiting上asd进行匹配这里分四步分析:一,rk原创 2021-04-15 14:05:47 · 1503 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件连接 二
Linux v4l2架构学习总链接二,mipi csi 与mipi csi phy这里直接贴出来bount函数static const structv4l2_async_notifier_operations csi2_async_ops = { .bound = csi2_notifier_bound, .unbind = csi2_notifier_unbind,};static intcsi2_notifier_bound(struct v4l2_async_notif原创 2021-04-15 14:09:36 · 1666 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件注册 imx291
Linux v4l2架构学习总链接rv1126 架构如下imx291 media相关注册代码如下:static int imx291_probe(struct i2c_client *client, const struct i2c_device_id *id) { ...#if defined(CONFIG_MEDIA_CONTROLLER) imx291->pad.flags = MEDIA_PAD_FL_SOURCE; sd->entity.fun原创 2021-04-14 15:40:22 · 974 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件注册 mipi csi phy
Linux v4l2架构学习总链接rv1126 架构如下mipi csi phy media相关注册代码如下:enum mipi_dphy_rx_pads { MIPI_DPHY_RX_PAD_SINK = 0, MIPI_DPHY_RX_PAD_SOURCE, MIPI_DPHY_RX_PADS_NUM,};static int rockchip_mipidphy_media_init(struct mipidphy_priv *priv){ int ret; pri原创 2021-04-14 15:31:29 · 1018 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media部件注册 mipi csi
Linux v4l2架构学习总链接rv1126 架构如下这里分析mipi csi#define CSI2_SINK_PAD 0#define CSI2_NUM_SINK_PADS 1#define CSI2_NUM_SRC_PADS 4#define CSI2_NUM_PADS 5#define CSI2_NUM_PADS_SINGLE_LINK 2static int csi2_probe(struct platform_device *pdev){ .原创 2021-04-14 11:54:08 · 1457 阅读 · 6 评论 -
基于RV1126平台imx291分析 --- media部件注册 rkcif_mipi
Linux v4l2架构学习总链接rv1126 架构如下前面分析subdev的时候,是从imx291开始的,这里分析media部件,换个方向,从rkcif_mipi开始这里有一部分内容需要去看subdev的分析rkcif_mipi对于media的操作有2个地方第一处就是注册video的时候video_register_device()-> video_register_media_controller()static int video_register_media_原创 2021-04-14 11:29:29 · 2519 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- media注册
Linux v4l2架构学习总链接media的注册参考rkcif_mipi的代码进行分析int rkcif_plat_init(struct rkcif_device *cif_dev, struct device_node *node, int inf_id){ ... media_device_init(&cif_dev->media_dev); ret = media_device_register(&cif_dev->media_dev);原创 2021-04-13 20:46:07 · 1383 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- 先研究media再分析应用调用
Linux v4l2架构学习总链接按照一开始的计划,这里应该去分析使用subdev的方式应用调用有什么不同。但是打开rkcif_mipi的open函数,看到这样一个代码int rkcif_update_sensor_info(struct rkcif_stream *stream){ struct rkcif_sensor_info *sensor, *terminal_sensor; struct v4l2_subdev *sensor_sd; int ret = 0; sens原创 2021-04-12 15:18:18 · 1650 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- 基于subdev的方式
Linux v4l2架构学习总链接即将开始实例分析项目中用的到sensor驱动基本都是基于subdev的方式比如一个摄像头需要以下配合使用处理器通过I2c和sensor通信,用于寄存器的配置 需要使用闪光灯 由于sensor输出的是BT1120,需要转换芯片转换成mipi信号给处理器 ...这样的话,我们也可以一个c文件都实现了,但是这样的会显得比较臃肿,而且每个模块修改都要改这个文件。所以这里完全可以将sensor,转换芯片,闪光灯都当成subdev设备比如下图:之原创 2021-04-12 13:43:26 · 2388 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- 统计已注册的设备信息
RV1126平台imx291分析这系列的文章中,明确的知道有3个subdev和1个video前面的文章中,我们已经分析了subdev和video的注册这里把这些节点的ops列举一下,方便分析后面的应用调用subdev列表如下:video列表:后面将通过应用去分析,主要去看调用过程,具体的函数功能不会分析其实到这里和vivi驱动的分析已经没有什么区别了。...原创 2021-04-10 14:43:45 · 1112 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- rkcif_mipi注册
Linux v4l2架构学习总链接rkcif_mipi源码dts源码如下rkcif_mipi_lvds: rkcif_mipi_lvds { compatible = "rockchip,rkcif-mipi-lvds"; ... status = "okay"; port { cif_mipi_in: endpoint { remote-endpoint = <&mipi_csi2_output>;原创 2021-04-10 10:03:35 · 5646 阅读 · 9 评论 -
基于RV1126平台imx291分析 --- 回顾之前的注册
再贴一下RV1126架构图所有的分析都是以设备注册是按照这个图来的就是imx291 -> mipi csi phy -> mipi csi -> rkcif_mipi的顺序前面分析的是imx291 -> mipi csi phy -> mipi csi这3个都是subdev,只有rkcif_mipi是video目前为止notifier_list链表上有3个notifier,分别是imx291的, mipi csi phy的及 mipi csi 的原创 2021-04-09 15:16:08 · 1427 阅读 · 2 评论 -
基于RV1126平台imx291分析 --- mipi csi 注册
Linux v4l2架构学习总链接mipi csi源码dts代码如下mipi_csi2: mipi-csi2@ffb10000 { compatible = "rockchip,rv1126-mipi-csi2"; status = "okay"; ports { ... port@0 { reg = <0>; mipi_csi2_input: endpoint@1 {原创 2021-04-09 14:57:33 · 2027 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- mipi-csi-phy注册
mipi-csi-phy源码dts配置如下csi_dphy0: csi-dphy@ff4b0000 { compatible = "rockchip,rv1126-csi-dphy"; ... status = "okay"; ... ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg原创 2021-04-09 11:11:01 · 3450 阅读 · 0 评论 -
基于RV1126平台imx291分析 --- imx291注册
imx291源码imx291的dts配置如下 imx291: imx291@1a { compatible = "sony,imx291"; status = "okay"; reg = <0x1a>; ... port { ucam_out2: endpoint原创 2021-04-08 16:23:58 · 3285 阅读 · 1 评论 -
基于RV1126平台imx291分析 --- 写在开始
imx291是我自己调试的一款摄像头,现在时间2021-08-04,由于飞线图像不稳定,不确定是寄存器配置问题还是飞线问题,但是不影响我们通过这个代码学习v4l2imx291的源码及datasheet已上传码云https://gitee.com/ldl17/v4l2-learn/tree/master/rv1126-imx291rv1126框架如下rv1126框架内的代码已经写好了,可以在/dev/下面看到video节点在这些平台上开发只需要我们实现imx291部分的代码就可以了。在原创 2021-04-08 14:51:42 · 3059 阅读 · 0 评论