赞
踩
V4L2框架
译注:这是目前看到关于V4L2框架内众多结构关系最提纲挈领的一张图。
子设备:v4l2_subdev struct
●通常芯片连接到i2c或SPI总线,或通过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-ctl:v4l2的瑞士军刀。
●v4l2兼容性:V4L2驱动程序兼容性测试。
●v4l2-dbg:允许访问DBG_G_CHIP_INFO,DBG_G / S_REGISTER。
●qv4l2:Qt测试应用程序。
●核心调试:“echo 1> / sys / class / video4linux /videoX / debug'。
- 1:显示ioctl名称
- 2:也显示参数
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。