【问题标题】:Difference between an API and a device driverAPI 和设备驱动程序之间的区别
【发布时间】:2015-07-01 17:03:06
【问题描述】:

我试图了解它们之间的关系。据我所知,它们都可以成为 HAL 的一部分。在应用程序和显卡之间进行通信的情况下 - API 可以自己完成工作还是我们必须同时依赖它们? API 可以直接与硬件通信,还是我们总是需要一个驱动程序来转换 API 的命令?

【问题讨论】:

    标签: api driver


    【解决方案1】:

    TL;DR

    将 API 视为描述要做什么的规范,而驱动程序是描述如何执行它的实现。

    详情

    作为一个人为的例子,假设我们有三个不同的声卡,我们想在多个操作系统上很好地播放它们。我们可以为卡制造商定义一个 API,“每张卡必须支持四种方法:mute()playsound(sound)volumeup()volumedown()”。通过定义 API,我们获得了一个通用接口,允许操作系统设计人员支持音频设备,而无需担心硬件细节。他们知道,如果要静音声卡,可以拨打mute(),或者如果要调大音量,可以拨打volumeup()

    然后由设备制造商实现一个真正执行这些操作的驱动程序。三种不同的声卡之间的驱动程序会有所不同,因为它们在硬件级别上是不同的,但 API 是一致的,因此下一个更高的抽象级别(操作系统)不需要知道如何处理硬件。

    对于更具体的示例,请考虑Advanced Control & Power Interface (ACPI) 规范。它为操作系统定义了一个通用接口,用于管理硬件设备的功耗和热特性。设备驱动程序或固件必须实现一些方法才能“符合 ACPI”。这允许 Windows 操作系统和 Linux 变体在硬件设备上执行相同的操作,而无需为硬件实现自己的驱动程序

    注意:Windows 通过acpi.sys 执行 ACPI 操作,他们称之为“ACPI 驱动程序”。不要让术语迷惑你;尽管他们称它为驱动程序,但它实际上是一个进入 ACPI 接口的窗口。 Linux 使用acpi kernel module 来做同样的事情,Linux 并不称其为驱动程序。也许 ACPI 不是 最好的 例子,但我目前没有更好的例子。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-06
      相关资源
      最近更新 更多