首页 > 其他分享 >V4L2 ioctl调用流程分析

V4L2 ioctl调用流程分析

时间:2024-03-26 19:14:08浏览次数:29  
标签:INFO 调用 ops V4L2 ioctl video FL v4l2

学习资料: 韦东山第三期   可参考:https://www.cnblogs.com/lethe1203/p/18097351

video_device 
    ->.fops ->v4l2_file_operations
    ->.ioctl_ops ->v4l2_ioctl_ops
0 v4l2_ioctl_ops可分为两类:
  • INFO_FL_STD:标准的,无需特殊的代码来处理,APP的调用可以直达这些处理函数
  • INFO_FL_FUNC:这类ioctl需要特殊处理,比如对于VIDIOC_ENUM_FMT,它需要根据设备的类型分别枚举:
0 简单地说,这2类ioctl的差别在于:
  • INFO_FL_STD:APP发出的ioctl直接调用底层的video_device->ioctl_ops->xxxx(....)
  • INFO_FL_FUNC:APP发出的ioctl,交给drivers\media\v4l2-core\v4l2-ioctl.c,它先进行一些特殊处理后,再调用底层的video_device->ioctl_ops->xxxx(....)
drivers\media\v4l2-core\v4l2-ioctl.c
  • 使用IOCTL_INFO_FNC定义的数组项,表示它是INFO_FL_FUNC类型的
0
  • 使用IOCTL_INFO_STD定义的数组项,表示它是INFO_FL_STD类型的
0   两类IOCTL调用流程:
上层调用ioctl
    ->v4l2_ioctl    // 次设备号找到video_device
        ->vdev->fops->unlocked_ioctl(filp, cmd, arg);    // 一般这个unlocked_ioctl都等于内核提供的video_ioctl2
            ->video_usercopy(file, cmd, arg, __video_do_ioctl);    // 调用__video_do_ioctl
                ->__video_do_ioctl    // v4l2_ioctl_ops *ops = vdev->ioctl_ops
                    ->v4l2_ioctls     // 根据cmd找到ioctl是标准的还是特殊处理的,标准和特殊的处理如下:
0        

标签:INFO,调用,ops,V4L2,ioctl,video,FL,v4l2
From: https://www.cnblogs.com/lethe1203/p/18097354

相关文章

  • V4L2驱动程序整体框架
    学习资料:韦东山第三期 应用程序调用open/read/write会调用到v4l2_fops的相应函数:接口层再调用到硬件相关的代码,根据打开的文件得到一个video_device(根据此设备号),调用这个video_device里面的vdev->fops->open函数可以看到read和ioctl也是类似的: 应用程序进入到驱动之......
  • V4L2应用程序开发(2)
    参考资料:韦东山第三期  V4L2获取数据的操作流程如下:打开设备ioctlVIDIOC_QUERYCAP:QueryCapbility,查询能力枚举格式、设置格式ioctlVIDIOC_REQBUFS:申请bufferioctlVIDIOC_QUERYBUF和mmap:查询buffer信息、映射ioctlVIDIOC_QBUF:把buffer放入"空闲链表"ioctlVIDIO......
  • Linux V4l2简单使用
    V4L2:VideoforLinuxtwo,缩写Video4Linux2,是Linux内核中的一个框架,提供了一套用于视频设备驱动程序开发的API。它是一个开放的、通用的、模块化的视频设备驱动程序框架,允许Linux操作系统和应用程序与各种视频设备(如摄像头、视频采集卡等)进行交互。V4L2提供了通用的API,使......
  • V4L2应用程序开发(1)
    参考资料:韦东山第三期 v4l2应用程序开发分为两个部分,数据采集流程和控制流程两个部分 数据采集流程:分为空闲链表和完成链表 驱动程序周而复始地做如下事情:从硬件采集到数据把"空闲链表"取出buffer,把数据存入buffer把含有数据的buffer放入"完成链表"APP也会周而......
  • jinja2 通过Template. make_module 进行动态macro 创建以及macro 方法调用
    实际属于一个小技巧,可以实现比较灵活的jinja2扩展,是从dbt对于macro的处理部分学习到的参考代码app.pyfromjinja2importEnvironment env=Environment() #定义macro的内容macro_template="""{%macromydemo(name,age)-%}{{name......
  • 使用go语言, 如何 只需一步调用,创建支付宝代扣
    使用go语言,如何只需一步调用,创建支付宝代扣  目标原理快速使用gitclonehttps://github.com/284851828/alilite_go.gitgomodtidygorundemo.go"#alilite_go"packagemainimport( "log" "time" c"alilite/client"//Replacewith......
  • 使用PHP语言, 如何 只需一步调用,创建支付宝代扣
    使用php语言,如何只需一步调用,创建支付宝代扣  目标原理"#alilite_php"<?phprequire_once'GatewaySdk.php';$appId="999999";//AppID向客户经理申请$sdk=newGatewaySdk($appId);$payload=['timestamp'=>1711347......
  • 调用SQL存储过程
    ImportsSystem.Data.SqlClient PublicSubExecuteStoredProcedure()'定义连接字符串,应该根据实际情况修改DimconnectionStringAsString="Server=你的服务器地址;Database=你的数据库名;UserId=你的用户名;Password=你的密码;" '创建连接对象UsingconnectionA......
  • Python调用GPT4,GPT3.5,gpt-4-all(全功能模型)
    使用地址:openai-api调用3.5代码#coding=gbkimportopenaiopenai.api_base='https://api.chuanchuan.cloud/v1'openai.api_key='sk-8fNMAI5HqltUroio74A1D72dB2524487B2D59f675940Bd39'messages=[{"role":"user","......
  • 大数据——调用百度地图接口进行规范
    importurllib.request,urllib.parse,urllib.errorimportjsonimporthashlibimportnumpyasnpimportpandasaspdMyAK=''MySK=''lat=0.0lng=0.0#处理得到urldefget_url(name):#GET请求http://api.map.baidu.com/geocoding/v3/?add......