【V4L2概述与I2C驱动概述】

本文档详细介绍了V4L2框架,包括用户态与内核态的概念,V4L2子模块及API使用流程。同时,探讨了I2C驱动的编写流程,涵盖adapter驱动和从设备驱动的注册、匹配过程,以及从设备匹配的详细步骤。

1 V4L2概述

1.1 用户态与内核态

在这里插入图片描述

1.2 V4L2子模块

名称描述备注
Video device子设备通过video_device在用户空间生成设备节点,进行操作;数据的交互亦是通过该节点进行
子设备系统(subdev)视频设备抽象层下的子设备,比如:mipi,isp,video等子设备。
Media framework将各种子设备抽象为entiry,pad,link。使得设备易于管理、抽象清晰
videobuf2负责buffer的管理工作,包括申请、释放、内核到用户空间的传递;<media/videobuf-dma-sg.h> /* 物理地址分散 /
<media/videobuf-vmalloc.h> / vmalloc() 分配的 buffer /
<media/videobuf-dma-config.h> / 物理地址连续 */
link
事件(fh)1.负责内核事件的管理,事件类型多样
2.v4l2_event提供一种将事件传递到用户空间的通用方式
1.驱动v4l2_event_queue 填充event.
2.驱动通过v4l2_event_subscribe 实现subdev_ioctl
3.调用路径video_device-> ioctl_ops-> vidioc_subscribe_event订阅到驱动。
4.用户通过poll和ioctl使用VIDIOC_DQEVENT获取event
ctrl控制 (自定义&系统提供)用于用户空间对视频的效果调节,比如曝光、色调、饱和度、亮度等等。内核提供了大部分的CID,也可以自己新增。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

1.3 V4L2 API使用流程

在这里插入图片描述
在这里插入图片描述

3. I2C驱动简述

在这里插入图片描述

名称描述其他
i2c_adapter1. 对应物理上的一个i2c适配器(I2c控制器)
2. 板子上几个i2c口,就需要几个i2c_adapter。
1. i2c_add_numbered_adapter,向i2c核心添加适配器,自己指定总线号
2. i2c_add_adapter,向i2c核心添加适配器,系统指定总线号
i2c_algorithm1. 对应一套通讯方法
2. 提供给i2c_adapter需要的访问控制函数。
i2c_driver1. 对应一套驱动方法
2. 可以支持多个同等类型的i2c_client
i2c_client1. 对应真实的物理设备,每个i2c设备都需要一个i2c_client来描述
2. i2c_adapter与i2c_client关系与硬件体系相同,i2c_client依附于i2c_adapter上。
3. 有几个从设备,就需要几个i2c_client。

3.1 驱动编写流程:

I2C驱动分为:adapter驱动,从设备驱动。
从设备注册i2c_new_device(动态)/i2c_register_board_info(静态);从设备驱动注册i2c_add_driver
1、i2c_add_adapter
2、i2c_new_device/i2c_register_board_info
3、i2c_add_driver
4、调用i2c bus中注册的match函数进行匹配
5、调用platform bus中注册的match函数进行匹配
6、i2cdev_attach_adapter

3.2 adapter驱动

(控制器驱动、i2c总线驱动)

  1. module_init/exit挂载驱动struct platform_driver到系统中。
  2. (of_device_id或者borad_info提供足够信息,匹配)
  3. probe中定义和初始化adapter/algorithm
  4. platform_device定义device资源。
  5. 也可以通过i2c_board_info,创建i2c_client(特别是从设备和控制器一起工作的厂家)。

3.3 从设备驱动

(i2c_client驱动)

  1. module_i2c_driver挂载驱动struct i2c_driver到系统中
  2. struct i2c_device_id、struct of_device_id用来定义device和驱动的匹配。
  3. probe中定义注册v4l2子设备的操作。

3.4从设备匹配过程

支持三种匹配:drv内部of_match_table匹配

名称描述
of_match_table使用drv内部的of_match_table列表匹配,一般设备树注册时才会使用这种匹配
acpi matchACPI专用,较少
i2c matchI2c常用匹配
name match平台总线常用,i2c不使用,i2c驱动中名字不重要

在这里插入图片描述

附录

[Camera]v4l2框架内核空间解析–知乎
v4l2框架浅析
v4l2学习总结文档
linux v4l2框架分析

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值