V4L2 Linux驱动简介(1)

V4L2系列 之 V4L2驱动框架 本篇文章主要介绍Linux内核中的V4L2框架,本篇文章所用内核版本:linux-4.19v4L2 (Video for Linux 2),是linux的一套视频框架,共主体位于内核,可以理解为是整个linux系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备、移动端以及个人电脑设备上面,市而上使用视频图像采集的设备如:手机、IPC、行车记录仪都会用到这个框架来进行视频采集。v4L2允许 应用程序 控制图像传感器以及传输格式,应用程序 借此完成拍照、预览、视频记录等图像传感器数据应用。 阅读详情

      书房网原文链接

    笔者最近有机会写了一个摄像头的驱动,是“One laptop per child”项目的中摄像头专用的。这个驱动使用了为此目的而设计的内核API:the Video4Linux2 API。在写这个驱动的过程中,笔者发现了一个惊人的问题:这个API的文档工作做得并不是很好,而用户层的文档则写的,实际上,相当不错。为了补救现在的状况,LWN将在未来的内个月里写一系列文章,告诉大家如何写V4L2接口的驱动。V4L2有一段历史了。大约在1998的秋天,灵感第一次出现在Bill Dirks的眼中。经过长足的发展,它于2002年11月,内核发布2.5.46时,融入了内核主干之中。然而直到今天,仍有一部分内核驱动不支持新的API,这种新旧API的转换工作仍在进行。同时,V4L2 API也在发展,并在2.6.18版本中进行了一些重大的改变。支持V4L2的应用依旧相对较少。

V4L2在设计时,是要支持很多广泛的设备的,它们之中只有一部分在本质上是真正的视频设备:

•video capture interface(影像捕获接口)从调谐器或是摄像头上获取视频数据。对很多人来讲,影像捕获(video capture)是V4L2的基本应用。由于笔者在这方面的经验是强项,这一系列文章也趋于强调捕获API,但V4L2不止这些。

•video output interface(视频输出接口)允许应用使用PC的外设,让其提供视频图像。有可能是通过电视信号的形式。
•
捕获接口还有一个变体,存在于videooverlay interface(视频覆盖接口)之中。它的工作是方便视频显示设备直接从捕获设备上获取数据。视频数据直接从捕获设备传到显示设备,无需经过CPU。

•VBI interfaces(Vertical blanking interval interface,垂直消隐接口)提供垂直消隐期的数据接入。这个接口包括raw和sliced两种接口,其分别在于硬件中处理的VBI数据量。 

•radio interface (广播接口)用于从AM或FM调谐器中获得音频数据。 
也可能出现其它种类的设备。V4L2API中还有一些关于编译码和效果设备的stub,他们都用来转换视频数据流。然而这块的东西尚未完成确定,更不说应用了。还有“teletext”和”radio data system”的接口,他们目前在V4L1 API中实现。他们没有移动到V4L2的API中来,而且目前也没有这方面的计划。

视频驱动与其他驱动不同之处,在于它的配置方式多种多样。因此大部分V4L2驱动都有一些特定的代码,好让应用可以知道给定的设备有什么功能,并配置设备,使其按期望的方式工作。V4L2的API定义了几十个回调函数,用来配置如调谐频率、窗口和裁剪、帧速率、视频压缩、图像参数(亮度、对比度…)、视频标准、视频格式等参数。这一系列文章的很大部分都要用来考察这些配置的过程。

然后,还有一个小任务,就是有效地在视频频率下进行I/O操作。V4L2定义了三种方法来在用户空间和外设之间移动视频数据,其中有些会比较复杂。视频I/O和视频缓冲层,将会分成两篇文章来写,它们是用来处量一些共性的任务的.

原文:

Your editor has recently had the opportunity to write a Linux driver for acamera device - the camera which will be packaged with the One Laptop PerChild system, in particular. This driver works with the internal kernelAPI designed for such purposes: the Video4Linux2 API. In the process ofwriting this code, your editor made the shocking discovery that, in fact,this API is not particularly well documented - though the user-space sideis, instead,quitewell documented indeed. In an attempt to remedy the situation somewhat, LWN will, over the coming months, publish a series ofarticles describing how to write drivers for the V4L2 interface.

V4L2 has a long history - the first gleam came into Bill Dirks's eye backaround August of 1998. Development proceeded for years, and the V4L2 APIwas finally merged into the mainline in November, 2002, when2.5.46 was released. To thisday, however, quite a few Linux drivers do not support the newer API; theconversion process is an ongoing task. Meanwhile, the V4L2 API continuesto evolve, with some major changes being made in 2.6.18. Applicationswhich work with V4L2 remain relatively scarce.

V4L2 is designed to support a wide variety of devices, only some of whichare truly "video" in nature:

  • The video capture interface grabs video data from a tuner or camera device. For many, video capture will be the primary application for V4L2. Since your editor's experience is strongest in this area, this series will tend to emphasize the capture API, but there is more to V4L2 than that.
  • The video output interface allows applications to drive peripherals which can provide video images - perhaps in the form of a television signal - outside of the computer.
  • A variant of the capture interface can be found in thevideo overlay interface, whose job is to facilitate the direct display of video data from a capture device. Video data moves directly from the capture device to the display, without passing through the system's CPU.
  • The VBI interfaces provide access to data transmitted during the video blanking interval. There are two of them, the "raw" and "sliced" interfaces, which differ in the amount of processing of the VBI data performed in hardware.
  • The radio interface provides access to audio streams from AM and FM tuner devices.

Other types of devices are possible. The V4L2 API has some stubs for"codec" and "effect" devices, both of which perform transformations onvideo data streams. Those areas have not yet been completely specified,however, much less implemented. There are also the "teletext" and "radiodata system" interfaces currently implemented in the older V4L1 API; thosehave not been moved to V4L2 and there do not appear to be any immediateplans to do so.

Video devices differ from many others in the vast number of ways in whichthey can be configured. As a result, much of a V4L2 driver implements codewhich enables applications to discover a given device's capabilities and toconfigure that device to operate in the desired manner. The V4L2 APIdefines several dozen callbacks for the configuration of parameters liketuner frequencies, windowing and cropping, frame rates, video compression,image parameters (brightness, contrast, ...), video standards, videoformats, etc. Much of this series will be devoted to looking at how thisconfiguration process happens.

Then, there is the small task of actually performing I/O at video rates inan efficient manner. The V4L2 API defines three different ways of movingvideo data between user space and the peripheral, some of which can be onthe complex side. Separate articles will look at video I/O and thevideo-buf layer which has been provided to handle common tasks.

Subsequent articles will appear every few weeks, and will be added to thelist below:


Linux中V4L2框架介绍—V4L2 Core V4L2(Video for Linux 2)框架是 Linux 内核中的一个子系统,专门用于处理视频设备的管理和控制。它提供了统一的 API 和抽象层,使得开发者可以编写通用的视频驱动程序,同时使用户空间的应用程序能够轻松地访问和控制视频设备。 阅读详情

相关推荐

深入学习Linux摄像头(二)v4l2驱动框架

深入学习Linux摄像头系列 深入学习Linux摄像头(一)v4l2应用编程 深入学习Linux摄像头(二)v4l2驱动框架 深入学习Linux摄像头(三)虚拟摄像头驱动分析 深入学习Linux摄像头(五)三星平台fimc驱动详解一 深入学习Linux摄像头(六)三星平台fimc驱动详解二 深入学习Linux摄像头(二)v4l2驱动框架 文章目录深入学习Linux摄像头(二)v4l2驱动框架一、V...

JT同学的博客 2万+

camera_kernel之---v4l2简单介绍(1)

V4l2接触的最早,网上也有很多资料,本来不想拿出来介绍。但是作为一个整体资料,还是简单写下。V4l2作为视频设备的内核驱动,为linux视频设备提供接口,内部包含了videobuf的相关操作接口,后续会单独写文档。 先看目录文件kernel/drivers/media/v4l2-core ├── v4l2-async.c ├── v4l2-clk.c ├── v4l2-common.c ├── v4l2-compat-ioctl32.c ├── v4l2-ctrls.c ├── v4l2-dev.c ├─

weixin_43503508的博客 2628

V4L2驱动框架详解

1.1 v4l2设备应用层流程1.2 内核V4L2模块 2。

weixin_42203498的博客 2万+

V4l2框架分析

1. V4L2框架概述 1.1 v4l2设备应用层流程 1.2 内核V4L2模块 2 2. video_device 2.1图像处理模块 2.2 video注册流程 3. videobuf2 3.1 与video device的关系: 3.2 buffer类型 3.3 vb2_ops回调函数 3.4 mmap 流程...

welljrj的博客 8959

Linux驱动框架之v4l2视频驱动框架解析

一、简介 v4l2是专门为linux设备设计的一套视频框架,其主体框架在linux内核,可以理解为是整个 linux 系统上面的视频源捕获驱动框架。其广泛应用在嵌入式设备以及移动端、个人电脑设备上面,市面上的编码产品类如:SDV、手机、IPC、行车记录仪都会用到这个框架来进行视频采集。 二、V4l2框架的结构 v4l2的核心源码位于linux/drivers/media/v4l2-core。 2.1、相关对象 v4l2驱动框架主要的对象有vi...

陈子陌的博客 6021

linux V4L2子系统——v4l2架构(1)之整体架构

V4L(Video for Linux)是Linux内核中关于视频设备的API接口,涉及视频设备的音频和视频信息采集及处理、视频设备的控制。V4L出现于Linux内核2.1版本,经过修改bug和添加功能,Linux内核2.5版本推出了V4L2(Video for Linux Two)子系统,功能更多且更稳定。...

枫潇潇 7995

Linux内核V4L2架构

V4L2是Video for linux2的简称,为linux中关于视频设备的内核驱动。是linux操作系统下一套用于采集图片、视频和音频数据的通用API接口,配合适当的视频采集设备和相应的驱动程序,可以实现图片、视频、音频等的采集。​ V4L2支持三种方式来采集图像:内存映射方式(mmap)、直接读取方式(read)和用户指针;

yzw_yy的博客 5578

Linux V4L2驱动框架分析之(四):sensor驱动

为了实现代码的重用,sensor驱动只需实现各种设备控制方法供上层调用并注册v4l2_subdev,而无需关心video_device和v4l2_dev。 struct v4l2_subdev结构体定义如下: struct v4l2_subdev { ...... struct list_head list; //用于挂入v4l2_dev的subdevs链表 struct module *owner; bool owner_v4l2_dev; u32 flags; struct v4l2_

m0_46525308的博客 6809

linux的v4l2驱动,V4L2 Linux驱动简介(1)

笔者最近有机会写了一个摄像头的驱动,是“One laptop per child”项目的中摄像头专用的。这个驱动使用了为此目的而设计的内核API:the Video4Linux2 API。在写这个驱动的过程中,笔者发现了一个惊人的问题:这个API的文档工作做得并不是很好,而用户层的文档则写的,实际上,相当不错。为了补救现在的状况,LWN将在未来的内个月里写一系列文章,告诉大家如何写V4L2接口的驱...

weixin_39783857的博客 309

Linux V4L2驱动框架分析之(一):架构介绍

V4L2是video for Linux 2的缩写,是一套Linux内核视频设备的驱动框架,为上层的访问底层的视频设备提供了统一的接口。 V4L2支持多种类型设备:视频输入输出设备、VBI设备和radio设备等,分别会在/dev目录下产生videoX、radioX和vbiX设备节点等。我们常见的视频输入设备主要是摄像头,也是本文主要分析对象。 V4L2的框架 V4L2的框架如下图所示: 主要包括以下四个部分: (1) 字符设备驱动程序核心:V4L2本身就是一个字符设备,具有字符设备所有的特性,暴露接口给用

m0_46525308的博客 6567

详解Linux下V4L2驱动框架

Video for Linux 2,简称V4l2,是Linux内核中关于视频设备的内核驱动框架,为上层的访问底层的视频设备提供了统一的接口。凡是内核中的子系统都有抽象底层硬件的差异,为上层提供统一的接口和提取出公共代码避免代码冗余等好处。在linux中,视频设备也是设备文件,可以像访问普通文件一样对其进行读写,摄像头在/dev/video0下。V4L2在设计时支持很多设备,其中只有一部分是真正的视频设备,主要有以下几种接口,如:1.视频采集接口:这种应用设备主要为摄像头。

weixin_64581379的博客 2574

Linux之V4L2驱动框架

V4L2(Video for linux two)是 Linux 内核中视频类设备的一套驱动框架,为视频类设备驱动开发和应用层提供了一套统一的接口规范。使用 V4L2 设备驱动框架注册的设备会在 Linux 系统/dev/目录下生成对应的设备节点文件,设备节点的名称通常为 videoX(X 标准一个数字编号:/dev/videox),每一个 videoX 设备文件就代表一个视频类设备。应用程序通过对 videoX 设备文件进行 I/O 操作来配置、使用设备类设备。...............

风间琉璃的博客 1万+

V4L2 驱动架构介绍

V4L2 驱动架构介绍

weixin_42136255的博客 2799

v4l2驱动框架简介

简介 v4l2全称是video for linux version2,是linux针对视频的一套驱动框架,包括视频输入(如摄像头),视频输出(如VGA输出等),视频编解码;本章节主要针对视频输入设备(如摄像头); 摄像头数据流 摄像头数据从内核空间(驱动)传输到用户空间(APP)主要有两种方法: a:用户空间通过read系统调用进入内核空间,内核空间驱动通过v4l2_file_operations->read读函数里调用copy_to_user函数将视频数据拷贝到用户空间,这种方法效率低下,对..

hqmo的博客 5182

V4L2框架概述

几乎所有的设备都有多个 IC 模块,它们可能是实体的(例如 USB 摄像头里面包含 ISP、sensor 等)、也可能是抽象的(如 USB 设备里面的抽象拓扑结构),它们在/dev目录下面生成了多个设备节点,并且这些 IC 模块还创建了一些非 v4l2 设备:DVB、ALSA、FB、I2C 和输入设备。正是由于硬件的复杂性,v4l2 的驱动也变得非常复杂。特别是 v4l2 驱动要支持 IC 模块来进行音/视频的混合/编解码操作,这就更加使得 v4l2 驱动变得异常复杂。

YellowMax 8万+

从零上手SKILL脚本:在Virtuoso中实现版图绘制自动化

本文详细介绍了如何使用SKILL脚本在Virtuoso中实现版图绘制自动化,从基础操作到高级技巧全面覆盖。通过抓取操作日志、转换交互式函数为程序式函数,以及核心函数深度解析,帮助读者快速掌握SKILL脚本编程,大幅提升版图设计效率。文章还提供了实际工程应用案例和调试优化技巧,适合从零开始的初学者。

weixin_28742653的博客 764

Linux V4L2驱动框架分析之(二):平台v4l2设备驱动

平台V4L2设备驱动的工作:根据平台自身的特性实现与平台相关的V4L2驱动部分,最主要的是包括设置并注册video_device和v4l2_device。 来看看v4l2_device结构体,定义如下: struct v4l2_device { struct device *dev; ...... //subdevs链表,属于该v4l2_device的子设备会挂入到该链表 struct list_head subdevs; spinlock_t lock; //v4l2_device

m0_46525308的博客 3765

树莓派4B玩转ROS2 Humble:Ubuntu Desktop一键安装与配置教程

本文详细介绍了在树莓派4B上安装和配置ROS2 Humble的完整教程,包括硬件准备、Ubuntu Desktop系统安装、一键部署ROS2、网络配置优化以及常见问题解决方案。通过简化安装流程和性能调优技巧,帮助开发者快速搭建机器人开发环境,充分发挥树莓派4B在ROS2应用中的潜力。

w8x9y0z1的博客 965

【Linux驱动】Linux--V4L2视频驱动框架

subdev的设计目的是为了多路复用,就是用一个v4l2_device可以挂接多个v4l2_subdev。依附在v4l2_device之下,并表示一个v4l2设备的子设备,一个v4l2_devide下可以有多个sub_device。v4l2_device里有一个v4l2_subdev链表,可以选择v4l2_device去控制哪一个v4l2_subdev。v4l2驱动框架主要的对象有video_device、v4l2_device、v4l2_subdev、videobuf。/* 实现各种系统调用 */

szembed的博客 2989

Ubuntu 24.04 部署 EMQX 5.8 开源版MQTT服务器:从零搭建到实战应用

本文详细指导如何在Ubuntu 24.04系统上部署EMQX 5.8开源版MQTT服务器。内容涵盖从环境准备、安装Erlang、下载安装包到启动服务的完整步骤,并提供了验证服务、配置网络防火墙以及通过WebSocket工具进行基础消息收发的实战方法,帮助用户快速搭建稳定、免费的物联网消息中间件。

weixin_29209825的博客 293

RK3588部署rtmpose模型

摘要: 本文详细介绍了在RK3588开发板上部署RTMPose模型的全流程。首先在Ubuntu环境中搭建MMCV框架,通过MMPose工具将PTH模型转换为ONNX格式。随后使用RKNN-Toolkit2将ONNX模型转换为RKNN格式,并完成开发板部署。关键步骤包括模型转换(PTH→ONNX→RKNN)、环境配置和推理验证,最终实现人体姿态估计功能。整个过程涉及MMPose、RKNN-Toolkit等工具链的使用,为边缘计算场景下的实时姿态分析提供了可行方案。

qq_44224801的博客 1219
上一篇: Ubuntu12.04上NFS Server安装使用过程
下一篇: V4L2 Linux驱动简介(2)驱动结构
kernel_learner
博客等级 码龄15年 60粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值