我试着理解它们彼此之间的关系。据我所知,他们都可以成为HAL的一部分。如果应用程序和图形卡之间的通信 - API可以自己完成工作,还是我们必须依赖它们? API可以直接与硬件通信,还是我们总是需要中间的驱动程序,这会转换API的命令?
答案 0 :(得分:14)
将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不是最好的示例,但我目前没有更好的东西。