假设我有一个摄像头,并且我在我的Linux OS中安装了这个摄像头的设备驱动程序,现在将为设备驱动程序创建一个设备文件(例如:/dev/video0
)。
现在假设我想用C
创建一个想要访问这个摄像头的程序。我的程序如何访问网络摄像头的设备驱动程序,我的程序应该使用设备文件(/dev/video0
)来访问设备驱动程序,还是有其他方法?
发布于 2017-10-15 19:15:45
你问了一个一般性的问题,然后给出了一个具体的例子。我将尝试同时解决这两个问题。
当你加载一个驱动程序时,从用户空间与它通信的方式是这个驱动程序定义的任何方式。通常,这是通过为驱动程序创建的/dev
设备实现的。如果是这样的话,是的,这是与之沟通的唯一方式。
这并不是普遍正确的。许多驱动程序在/sys
sysfs伪文件系统下也有条目,可以通过这些条目修改某些方面。事实上,有一整类的驱动程序只能通过/sys
文件系统访问。突出的例子是GPIO和Led设备,它们可以通过访问/sys/class/gpio
和类似路径来打开和关闭。
另一个选项是使用/proc
伪文件系统,该选项被认为已被弃用,但有时仍在使用。同样,这取决于驱动程序来定义其通信方法。作为用户,您必须遵循驱动程序定义的任何协议。
此外,一些驱动程序根本没有任何文件系统。最明显的标准示例是网络接口。与它们通信的唯一方法是通过网络系统调用。
在您提供的特定示例中,您谈到了一个显示为/dev/video0
的摄像机。这样的摄像头通常是Video4Linux (或v4l)摄像头,这些摄像头是通过其字符设备访问的。
如上所述,与摄像头通信的协议可能会有使生活变得更容易的包装器。如果你打开实际的设备,你可能需要实现一个相当复杂的握手过程。相反,您可以使用v4l库来包装访问的细节。
别搞错了。您仍在与/dev
中的字符设备对话。只是这不是你的代码做的,而是库的。
https://stackoverflow.com/questions/46752823
复制相似问题