我正在学习设备驱动程序,根据我目前所知道的,如果您的应用程序想要与某个设备通信,它就不能直接与设备连接的端口(例如:串行端口)通信。但是,您应该创建一个允许与串口通信的设备驱动程序,然后应用程序将与设备驱动程序通信。
现在我的问题是:当设备驱动程序将数据发送到串口时,它是直接将数据发送到串口,还是串口本身有一个设备驱动程序,而要将数据发送到串口,则设备驱动程序必须将数据发送到串口的设备驱动程序。
这个问题的引语让我想到了这一点:
您的计算机上的串口驱动程序指示操作系统如何与专用硬件对话。
发布于 2017-05-28 03:12:42
在现代操作系统中,设备驱动程序有两个目的:
在考虑使用设备驱动程序时,必须记住这两个目的,同时考虑什么是必要的,哪些不是必需的,哪些是不可取的。现在,把你的问题分解成以下几个细节:
如果应用程序想要与某个设备通信,则不能直接与设备连接的端口通信。
正确的。这是因为“潜在危险的行动”部分。与串行端口通信,取决于您正在运行的确切硬件,需要:
通常,这些资源在多个端口之间共享,因此如果您的进程可以直接执行其中任何一个,它将能够干扰可能使用其他端口的任何其他进程。因此,需要一个中介,确保它只执行不会导致系统其他部分问题的操作。设备驱动程序就是这样一个中介。
但是,您应该创建一个允许与串口通信的设备驱动程序,然后应用程序将与设备驱动程序通信。
这通常是不必要的。操作系统提供了串口驱动程序,所以您不需要自己创建一个。一般来说,用户应用程序永远不需要提供设备驱动程序:设备驱动程序是与它们运行的硬件相关联的系统功能,而不是希望使用它的应用程序。这涉及到“抽象层”的用途:有多种类型的串行端口,设备驱动程序知道如何与计算机安装的实际类型对话。您的应用程序只需要知道如何与设备驱动程序对话,并且您的操作系统提供了一个标准的接口,它不需要知道确切的驱动程序在使用什么。
现在我的问题是:当设备驱动程序将数据发送到串口时,它是直接将数据发送到串口,还是串口本身有一个设备驱动程序,而要将数据发送到串口,则设备驱动程序必须将数据发送到串口的设备驱动程序。
这通常不是必要的。您只需要一个设备驱动程序就可以实现这两个目的:
也就是说,有一种情况与您描述的情况类似,您可能希望有一个特定于应用程序的设备驱动程序,该驱动程序将数据发送给硬件特定的设备驱动程序。也就是说,如果您有一个通过串行端口连接到计算机的设备,但是您希望应用程序在逻辑上认为它是独立于串行端口的--也许是因为您可能希望能够产生一系列具有相同行为的设备,但可能有一个串口版本、一个USB版本、一个并口版本等等。在这种情况下,可能值得创建第二个提供第二个抽象层的驱动程序(在这种情况下,抽象外部设备连接的细节而不是它与端口的连接方式)。值得庆幸的是,这方面的一个例子(谢天谢地)是您以前能够通过串口获得连接的鼠标的方式。它们将有一个实现标准鼠标协议的驱动程序,并与串口驱动程序进行实际通信。
发布于 2017-05-28 03:19:05
你的问题措辞有点令人困惑,可能是因为你对它的理解不够,但是硬件中并没有像驱动程序这样的东西,如果这就是你想要问的。然而,特别是在桌面操作系统上,设备驱动程序通常是用层编写的。底层只在特定的芯片或兼容芯片家族上工作,下一层可能是制造商的所有芯片,下一层是RS-232,下一层是所有的字符设备。
然后,当您有一种使用跨平台虚拟机的语言时,它将有自己的串行驱动程序层,有时当人们不喜欢驱动程序提供的默认API时,他们会在可以称为驱动程序的驱动程序之上创建一个增强的用户空间层。
因此,术语驱动程序在某种程度上是过载的和上下文相关的。它们都抽象出了不同串行端口中的差异,但在不了解上下文的情况下,您可能在谈论的东西实际上是在电线上设置电压,或者只是给您提供比javax.comm提供的更好的东西。
https://softwareengineering.stackexchange.com/questions/349713
复制相似问题