API和设备驱动程序之间的区别

6

我试图理解它们之间的关系。据我所知,它们都可以是HAL的一部分。在应用程序和图形卡之间进行通信的情况下,API能否独立完成工作,还是我们必须依赖它们两个?API能否直接与硬件通信,还是我们总是需要一个驱动程序在中间转换API的命令?

1个回答

20

TL;DR

API是描述“做什么”的规范,驱动程序是描述“如何做”的实现。

详情

举个例子,假设我们有三种不同的音频卡,希望能够与多个操作系统兼容。我们可以为卡片制造商定义一个API,该API指定了四种方法:mute()playsound(sound)volumeup()volumedown()。通过定义API,我们得到了一个通用接口,使操作系统设计者能够支持音频设备,而不必担心硬件细节。他们知道如果他们想要静音声卡,他们可以调用mute(),或者如果他们想要增加音量,他们调用volumeup()

然后由设备制造商实现驱动程序来执行这些操作。驱动程序将因三种不同音频卡在硬件级别上的差异而有所不同,但API是一致的,所以更高抽象级别(操作系统)不需要知道如何处理硬件。

作为一个更具体的例子,考虑高级控制和电源管理接口 (ACPI)规范。它定义了一个通用接口,以便操作系统能够管理硬件设备的功耗和热特性。设备驱动程序或固件必须实现一些方法才能“符合ACPI”。这使得Windows操作系统和Linux变体都能执行相同的硬件设备操作,而不需要为硬件实现自己的驱动程序。

注意:Windows 通过称之为“ACPI Driver”的 acpi.sys 执行ACPI动作。不要让术语混淆您;尽管他们称其为驱动程序,但实际上它是进入ACPI接口的窗口。Linux 使用 acpi 内核模块 来执行相同的操作,并且Linux并不称之为驱动程序。或许ACPI不是最好的例子,但我暂时没有更好的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接