最后更新:2022-05-22 22:24
V4L2是专为Linux装置制作的一系列视频框架,主框架内嵌在Linux内,作为整个Linux系统的视频源捕捉驱动器框架。
摄像头驱动层位于HAL模块和硬件层之间,它使用linux内核驱动框架通过文件节点将界面暴露给用户,允许Hal模块通过标准文件访问界面,以便请求能够顺利地提交内核。
根据V4l2标准,他将数据流装置摘要编成一个视频X节点,系列的次设备与相关的v4l2_subdev相对应,由媒体控制器集中管理,这是一个复杂但有效的程序。
而对高通平台而言,V4l2框架支撑整个内核摄像驱动器。后来又扩大了规模。我为公司摄像控制器创建了CRM使用节点视频0, 它暴露了用户空间 。它主要用于内核处理会话、请求和次级设备。同时,每个子模块都有自己的V4l2_subdev装置。它还通过v4l2_subdev节点暴露了用户的空间。与此同时,SYNC摄像机是Hightowower开发的另一台视频1装置。该设备的主要功能是同步数据流 。确保有效转让用户空间和内核空间缓冲。

流程如下图:
整个数据收集程序现在似乎相当容易。界面的控制逻辑是显而易见的。关键的原因是用户界面是基本和抽象的。这是一种易于使用的综合发展方法。V4L2涵盖大多数这些困难过程。现在让我们回顾一下V4L2框架的表述方式及其运作方式。
如上图所示, v4l2_ device 担任顶级经理,允许访问 v4l2 框架。
v4l2_subdev 结构被一致地用来界定每个次设备。
因此,V4L2框架是围绕这些基本概念排列的, 我们将很简短。
结构代表整个V4L2装置。作为V4L2总经理使用链表处理与完整分设备有关的所有次设备。如果您使用媒体主计长来管理整个框架,在初始化时,必须给内部变量 mdev 指定一个成功的介质设备值。这导致了与媒体设备的关系,媒体设备一直是了解该国困境的关键信息来源。驱动器将分别引用 v4l2_device_register 和 v4l2_device_unregister 方法,在系统注册并解除登记 v4l2_device_device_unregister 。
结构是一个子设备 。在启动时,每个子设备必须安装在总计 v4l2_ device 上。此外,要将 v4l2 设备值指定为内部 V4l2_dev 变量,他用v4l2设备加入了统一管理的次级设备链子链。这提高了每个次级设备可以使用的效率。然而,它必须界定许多硬件部件的独特操作行为。要指定它, v4l2_subdev 定义了 v4l2_subdev_ops 结构 。其实施由若干硬件组成部分决定。其中之一是,如果使CONFIG_MEDIA_CONTROLER 宏变得可行,就不能使用。在介质_控制器中,将产生可比的介质实体。来代表该子设备,如果是次级结构,它将加在实体变量中。最后,如果有必要建立设备节点,这是通过使用视频设备访问标准 API 接口实现的。相关视频设备将存储在Devnode的内部变量中。
如果您想要使用 v4l2_device 或 v4l2_subdev, 您需要在系统中构建节点 。我们必须这样做,才能做到这一点。它是用视频录相机制成的其中之一是录相设备操作技术集。在V4l2的范围内,它会将视频设备插入带有唯一主设备编号的字符设备。在运作节点上,援引集会程序。除了这些标准的一套操作性标准之外,它还具体规定了一套octl操作。内部ioctl_ops 描述
如果启用宏 CONFIG_MEDIA_CONTROLER,当 v4l2_ device 初始化时, 它也会生成介质_ sevice 。此介质设备是媒体控制器的抽象管理器 。每个V4l2装置及其相关次级设备将分配给某一实体。它集中在Media_device。与其他抽象装置类似,媒体设备也有自己的个性。例如,用户可以访问媒体节点。这是年轻人首次被确认为犯罪受害者,并且被确认为同一v4l2_ defice的次级设备。另外,当数据流被激活时,在一定的顺序下,媒体设备将众多的媒体实体联系起来。总体数据流动控制已经完成。
在整个V4L2框架的功能中,图像数据缓冲地带的管理是其核心。vb2_ queue 处理此管理 。当设备打开时, 通常会建立 vb2_ queue 。vb2_ops 的结构允许驱动它自行操作 。vb2_mem_ops是内存分布算法的集合。另外,还有一套处理用户和内核空间间传输的机制。这个方法集有时被称为v4l2_buf_ops标准方法集。除了这些方法集外,vb2_buffer 数组被 vb2_ queue 用于处理应用程序的所有数据缓冲 。他用排队名单控制了队列状态中的所有缓冲完成列表后, 管理所有包含数据并准备消耗的缓冲 。
在V4L2结构中,该结构代表一个图像缓冲区。当您在团队中时, 队列中的输入与 vb2_ queue 中的队列中的列表相连 。Doone_ entry 与 vb2_ queue 中的 doone_ list 连接在一起,而他们正在等待消费。缓冲区由 vb2_queue 管理。
本文由 在线网速测试 整理编辑,转载请注明出处。