Video4Linux框架简介(7) - V4L2框架和v4l2_subdev

25 篇文章 2 订阅
12 篇文章 10 订阅

V4L2框架


译注:这是目前看到关于V4L2框架内众多结构关系最提纲挈领的一张图。



子设备:v4l2_subdev struct

通常芯片连接到i2cSPI总线,或通过GPIO引脚控制,但它们也可以表示SoC / FPGA内部模块。

子设备驱动程序可以由不同的桥驱动程序使用,因此它们不能依赖于任何特定的桥驱动程序。

不能进行探测,因此桥接器驱动程序必须显式加载子驱动程序。

必须可以寻址一个,一个子集或所有子驱动程序。

API必须与总线无关。

大量的硬件导致大量的API:如何保持高效?


译注:由于V4L2框架本身支持的设备类型众多,而每种设备的操作函数又大有不同,因此除了核心回调v4l2_subdev_core_ops以外,每一种都各自封装。此外框架也提供了一个宏v4l2_subdev_call巧妙地调用不同的操作。

struct v4l2_subdev_ops {
const struct v4l2_subdev_core_ops *core;
const struct v4l2_subdev_tuner_ops *tuner;
const struct v4l2_subdev_audio_ops *audio;
const struct v4l2_subdev_video_ops *video;
const struct v4l2_subdev_vbi_ops *vbi;
const struct v4l2_subdev_ir_ops *ir;
const struct v4l2_subdev_sensor_ops *sensor;
const struct v4l2_subdev_pad_ops *pad;
};
struct v4l2_subdev_core_ops {
int (*log_status)(struct v4l2_subdev *sd);
int (*s_config)(struct v4l2_subdev *sd, int irq, void
*platform_data);
int (*s_io_pin_config)(struct v4l2_subdev *sd, size_t n,
struct v4l2_subdev_io_pin_config *pincfg);
…
};
#define v4l2_subdev_call(sd, o, f, args...) \
(!(sd) ? -ENODEV : (((sd)->ops->o && (sd)->ops->o->f) ? \
(sd)->ops->o->f((sd) , ##args) : -ENOIOCTLCMD))
ret = v4l2_subdev_call(sd, core, s_config, 0, &pdata); 

实用工具

实用工具

v4l2-ctlv4l2的瑞士军刀。

v4l2兼容性:V4L2驱动程序兼容性测试。

v4l2-dbg:允许访问DBG_G_CHIP_INFODBG_G / S_REGISTER

qv4l2Qt测试应用程序。

核心调试:“echo 1> / sys / class / video4linux /videoX / debug'

- 1:显示ioctl名称

- 2:也显示参数


  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值