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

时间:2017-10-15 07:41:46

标签: c linux device-driver

我们说我有一个网络摄像头,我在我的Linux操作系统中安装了此网络摄像头的设备驱动程序,现在将为设备驱动程序创建一个设备文件(例如:/dev/video0)。

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

1 个答案:

答案 0 :(得分:1)

你问了一般性问题,然后给出了一个具体的例子。我试着解决这两个问题。

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

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

另一个被认为已弃用但仍有时使用的选项是使用/proc伪文件系统。同样,这取决于驱动程序定义其通信方法。作为用户,您必须遵循驱动程序定义的任何协议。

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

在您提供的特定示例中,您谈到了显示为/dev/video0的视频摄像头。这种相机通常是Video4Linux(或v4l)相机,可以通过角色设备访问。

话虽如此,与相机通信的协议可能有包装,使生活更轻松。如果您打开实际设备,则可能必须使用它实现相当复杂的握手。相反,您可以使用v4l库来包装访问的详细信息。

毫无疑问。您仍在/dev中与角色设备通话。只是因为它不是你的代码所做的,而是图书馆的。