驱动程序是一个软件组件,它允许操作系统和设备进行通信。 例如,当应用需要从设备读取数据时whatsapp网页版,它会调用操作系统实现的函数。 然后,操作系统调用驱动程序实现的函数。 驱动程序通常由设备制造商开发,知道如何与设备硬件通信以获取数据。 驱动程序获取数据后,它会将其返回给操作系统,然后操作系统将其返回给应用。
我们的解释简化了驱动程序的概念。 下面是一些需要考虑的要点:
我们可以将驱动程序的定义细化为观察或参与操作系统与设备之间的通信的任何软件组件。
软件驱动程序
我们的扩展定义相当准确,但仍不完整,因为某些驱动程序根本不与任何硬件设备相关联。
例如,如果需要编写访问核心操作系统数据结构的工具,可以将该工具拆分为两个组件。 第一个组件在用户模式下运行且提供用户界面。 第二个组件在内核模式下运行,并访问核心操作系统数据。 在用户模式下运行的组件称为应用程序,在内核模式下运行的组件称为“软件驱动程序” 。 软件驱动程序不与硬件设备关联。
此图说明了与内核模式软件驱动程序通信的用户模式应用程序。
软件驱动程序始终在内核模式下运行。 它们主要用于访问仅在内核模式下可用的受保护数据。 但是,并非所有设备驱动程序都需要访问内核模式数据和资源,因此某些设备驱动程序在用户模式下运行。
有关处理器模式的详细信息,请参阅用户模式和内核模式。
总线驱动程序
另一种类型的驱动程序是 总线驱动程序。 若要了解总线驱动程序,需要了解设备节点和设备树。
有关设备树、设备节点以及总线驱动程序的信息whatsapp网页版,请参阅设备节点和设备堆栈。
有关函数驱动程序的详细信息
到目前为止whatsapp网页版,我们的解释过于简化 函数驱动程序的定义。 我们指出,设备的函数驱动程序是堆栈中直接与设备通信的一个驱动程序。 对于直接连接到外围组件互连 (PCI) 总线的设备来说,这是正确的。 PCI 设备的函数驱动程序会获取映射到设备上的端口和内存资源的地址。 函数驱动程序通过写入这些地址直接与设备通信。
但是,在许多情况下,设备无法直接连接到 PCI 总线。 相反,设备会连接到连接到 PCI 总线的主机总线适配器。 例如,USB toaster 连接到主机总线适配器(称为 USB 主控制器),该适配器连接到 PCI 总线。 USB toaster 具有函数驱动程序,USB 主控制器也具有函数驱动程序。 toaster 的函数驱动程序通过向 USB 主控制器的函数驱动程序发送请求来与 toaster 间接通信。 然后,USB 主控制器的函数驱动程序与 USB 主控制器硬件直接通信,该硬件与 toaster 通信。
