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

use*_*514 2 api driver

我试着理解它们彼此之间的关系.据我所知,他们都可以成为HAL的一部分.如果应用程序和图形卡之间的通信 - API可以自己完成工作,还是我们必须依赖它们?API可以直接与硬件通信,还是我们总是需要中间的驱动程序,这会转换API的命令?

skr*_*sme 14

TL; DR

想想一个API作为一个描述规范的是什么做的,而司机是描述一个实现了如何做到这一点.

细节

作为一个人为的例子,想象一下我们有三种不同的声卡,我们想要与多种操作系统很好地配合使用.我们可以定义为卡制造商,上面写着:"每个卡必须支持四种方法:一个API mute(),playsound(sound),volumeup()volumedown()".通过定义API,我们获得了一个通用接口,允许操作系统设计人员支持音频设备,而无需担心硬件细节.他们知道,如果他们想要静音声卡,他们可以打电话mute(),或者如果他们想要调高音量,他们就会打电话volumeup().

然后由设备制造商来实现实际执行这些操作的驱动程序.驱动程序将在三种不同的音频卡之间变化,因为它们在硬件级别上不同,但API是一致的,因此下一个更高的抽象级别(OS)不需要知道如何处理硬件.

有关更具体的示例,请考虑高级控制和电源接口(ACPI)规范.它定义了操作系统的通用接口,以管理硬件设备的功耗和热特性.设备驱动程序或固件必须实现的方法才能"符合ACPI".这允许Windows操作系统和Linux变体在硬件设备上执行相同的操作,而无需为硬件实现自己的驱动程序

注意:Windows通过acpi.sys执行ACPI操作,它们称之为"ACPI驱动程序".不要让术语混淆你; 即使他们称之为驱动程序,它实际上是进入ACPI界面的窗口.Linux使用acpi内核模块做同样的事情,而Linux并不称它为驱动程序.也许ACPI不是最好的例子,但我目前没有更好的东西.