V4L2概述与I2C驱动概述
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_adapter | 1. 对应物理上的一个i2c适配器(I2c控制器) 2. 板子上几个i2c口,就需要几个i2c_adapter。 | 1. i2c_add_numbered_adapter,向i2c核心添加适配器,自己指定总线号 2. i2c_add_adapter,向i2c核心添加适配器,系统指定总线号 |
| i2c_algorithm | 1. 对应一套通讯方法 2. 提供给i2c_adapter需要的访问控制函数。 | |
| i2c_driver | 1. 对应一套驱动方法 2. 可以支持多个同等类型的i2c_client | |
| i2c_client | 1. 对应真实的物理设备,每个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总线驱动)
- module_init/exit挂载驱动struct platform_driver到系统中。
- (of_device_id或者borad_info提供足够信息,匹配)
- probe中定义和初始化adapter/algorithm
- platform_device定义device资源。
- 也可以通过i2c_board_info,创建i2c_client(特别是从设备和控制器一起工作的厂家)。
3.3 从设备驱动
(i2c_client驱动)
- module_i2c_driver挂载驱动struct i2c_driver到系统中
- struct i2c_device_id、struct of_device_id用来定义device和驱动的匹配。
- probe中定义注册v4l2子设备的操作。
3.4从设备匹配过程
支持三种匹配:drv内部of_match_table匹配
| 名称 | 描述 |
|---|---|
| of_match_table | 使用drv内部的of_match_table列表匹配,一般设备树注册时才会使用这种匹配 |
| acpi match | ACPI专用,较少 |
| i2c match | I2c常用匹配 |
| name match | 平台总线常用,i2c不使用,i2c驱动中名字不重要 |

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

被折叠的 条评论
为什么被折叠?



