只能使用其设备文件访问Linux中的设备驱动程序?

问题描述:

比方说,我有一个网络摄像头,并且我在Linux操作系统中安装了此网络摄像头的设备驱动程序,现在将为设备驱动程序创建一个设备文件(例如:/dev/video0)。只能使用其设备文件访问Linux中的设备驱动程序?

现在说我想创建一个程序C想要访问此摄像头。如果我的程序使用设备文件(/dev/video0)访问设备驱动程序,或者有其他方法,我的程序如何访问网络摄像头的设备驱动程序?

+0

取决于设备类别。 –

+1

对于大多数实际用途,答案是肯定的。 –

+0

大多数网络摄像头驱动程序与[Video4Linux APIs](https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/open.html)兼容,它在'/ dev'中使用与其他许多其他节点相同的旧节点设备驱动程序('tty's,disks等) – myaut

你问了一个普遍的问题,然后给出了一个具体的例子。我会尽力解决这两个问题。

加载驱动程序时,从用户空间与它进行通信的方式是通过此驱动程序定义的任何方式。通常,这是通过为驱动程序创建的/dev设备。如果是这样的话,是的,这是与之沟通的唯一方式。

这不是普遍的事实。许多驱动程序在/sys sysfs伪文件系统下也有条目,并且可以通过那里修改一些方面。实际上,通过/sys FS可以获得全部类别的驱动程序,它们是只有。突出的例子是GPIO和Led设备,可以通过访问/sys/class/gpio和类似的路径打开和关闭设备。

另一种被认为不推荐使用的方法是使用/proc伪文件系统。再次,这取决于驱动程序来定义其通信方法。作为用户,您必须遵循驱动程序定义的任何协议。

此外,一些驱动程序根本没有任何文件系统存在。最明显的标准例子是网络接口。与他们沟通的唯一方式是通过网络系统调用。

在您提供的特定示例中,您提到了一个显示为/dev/video0的摄像机。这种摄像机通常是一台Video4Linux(或v4l)摄像机,通过他们的角色设备进行访问。

就是这样说,用于与相机通信的协议可能会包装,使生活更轻松。如果你打开实际的设备,你可能必须实现一个相当复杂的握手。相反,您可以使用v4l库来包装访问的详细信息。

请不要误解。您仍在与/dev中的字符设备交谈。只是它不是你的代码,而是图书馆的。