linux i2c v4l2驱动核心的知识 platform,Video4Linux框架簡介(7) - V4L2框架和v4l2_subdev

V4L2框架

譯注:這是目前看到關於V4L2框架內眾多結構關系最提綱挈領的一張圖。

8d5d66c8938b8b7e002a3aae9cd2a7e2.png

子設備: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:也顯示參數

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值