我们说我有一个网络摄像头,我在我的Linux操作系统中安装了此网络摄像头的设备驱动程序,现在将为设备驱动程序创建一个设备文件(例如:/dev/video0
)。
现在说我想在C
中创建一个想要访问此网络摄像头的程序。如果我的程序使用设备文件(/dev/video0
)访问设备驱动程序,或者有其他方式,我的程序如何访问网络摄像头的设备驱动程序?
答案 0 :(得分:1)
你问了一般性问题,然后给出了一个具体的例子。我试着解决这两个问题。
加载驱动程序时,从用户空间与其进行通信的方式是此驱动程序定义的任何方式。通常,这是通过为驱动程序创建的/dev
设备。如果是这样的话,是的,这是与之沟通的唯一方式。
这不是普遍的事实。许多驱动程序在/sys
sysfs伪文件系统下也有条目,并且可以通过那里修改某些方面。事实上,只有只能通过/sys
fs访问的驱动程序。突出的例子是GPIO和Led设备,可以通过访问/sys/class/gpio
和类似路径来打开和关闭。
另一个被认为已弃用但仍有时使用的选项是使用/proc
伪文件系统。同样,这取决于驱动程序定义其通信方法。作为用户,您必须遵循驱动程序定义的任何协议。
此外,一些驱动程序根本没有任何文件系统存在。最明显的标准示例是网络接口。与它们通信的唯一方法是通过网络系统调用。
在您提供的特定示例中,您谈到了显示为/dev/video0
的视频摄像头。这种相机通常是Video4Linux(或v4l)相机,可以通过角色设备访问。
话虽如此,与相机通信的协议可能有包装,使生活更轻松。如果您打开实际设备,则可能必须使用它实现相当复杂的握手。相反,您可以使用v4l库来包装访问的详细信息。
毫无疑问。您仍在/dev
中与角色设备通话。只是因为它不是你的代码所做的,而是图书馆的。