【问题标题】:difference between v4l2_ioctl and ioctlv4l2_ioctl 和 ioctl 的区别
【发布时间】:2021-07-14 11:48:33
【问题描述】:

我目前正在研究如何从 python 使用 v4l2 设备,并发现 python 有一个 ioctl 的绑定 (https://docs.python.org/3/library/fcntl.html)。

我在 C 中做了一些实现,但我很难理解 ioctl 是否与 v4l2_ioctl 相同?

它们似乎采用完全相同的参数,在官方示例中,我看到两者都包装在一个函数中,以相同的方式使用:

static void xioctl(int fh, int request, void *arg)
{
        int r;

        do {
                r = v4l2_ioctl(fh, request, arg);
        } while (r == -1 && ((errno == EINTR) || (errno == EAGAIN)));

        if (r == -1) {
                fprintf(stderr, "error %d, %s\\n", errno, strerror(errno));
                exit(EXIT_FAILURE);
        }
}

对于普通的 ioctl:

static int xioctl(int fh, int request, void *arg)
{
        int r;

        do {
                r = ioctl(fh, request, arg);
        } while (-1 == r && EINTR == errno);

        return r;
}

我查看了 linux 存储库,但无法弄清楚两者之间的确切区别。

我可以互换使用 ioctl 和 v4l2_ioctl 吗?
如果是,为什么两者都存在?
如果不是,与 v4l2_ioctl 相比,ioctl 的局限性是什么?

【问题讨论】:

标签: linux ioctl v4l2


【解决方案1】:

我可以互换使用 ioctl 和 v4l2_ioctl 吗?

没有。

如果是,为什么两者都存在?

ioctl 的存在是为了对设备进行一些特殊操作。

v4l2_ioctllibv4l2 的包装器,用于简化 v4l2 设备上的操作。

来自README

libv4l2

这提供了 v4l2_open、v4l2_ioctl 等功能,可以通过 用于快速使 v4l2 应用程序与 v4l2 设备一起使用 奇怪的格式。 libv4l2 主要将调用直接传递给 v4l2 驱动程序。当应用程序执行不支持的 TRY_FMT / S_FMT 格式 libv4l2 将进入中间并模拟格式(如果 应用想知道硬件真正应该做到哪些格式 使用 ENUM_FMT,而不是随机尝试一堆 S_FMT)。更多细节 关于 v4l2_ 函数,请参见 libv4l2.h。

the source found in libv4l project 是终极代码文档。

【讨论】:

  • 一个小的后续问题。如果 v4l2_ioctl 是一个包装器,这是否意味着我可以用 ioctl 做同样的事情,尽管它可能更难/更耗时?或者如果我使用 ioctl,我会受到限制吗?
  • 另外,我偶然发现了你链接到我自己的项目,但我也发现了这个定义(这是不同的,并且似乎递归地调用自己)github.com/torvalds/linux/blob/master/drivers/media/v4l2-core/… 这个也定义了 v4l2_ioctl
  • If v4l2_ioctl is a wrapper, does that mean i can potentially do the same things with ioctl, though it may be harder/more time consuming? Se v4l2_ioctl 为它需要的东西提供资源.. 我看不出有什么特别之处,只有一个 SYS_IOCTL 电话接近尾声。 his one also defines v4l2_ioctl这是一个处理v4l2 ioctl的内核v4l2驱动函数。
猜你喜欢
  • 2013-09-24
  • 2013-08-07
  • 2011-10-20
  • 2020-01-23
  • 1970-01-01
  • 2014-10-09
  • 2010-12-21
  • 2011-05-11
  • 2014-01-24
相关资源
最近更新 更多