在 Linux 中,HAL 提供硬件抽象,设备驱动也提供硬件抽象。你能澄清一下两者之间的区别吗?
4 回答
设备驱动程序在特定缓冲区和控制标志块位置与特定设备通信。硬件抽象层抽象出特定设备如何工作的细节。例如,USB 鼠标的驱动程序与 PS2 鼠标的驱动程序非常不同,但在 HAL 层它们都是鼠标,可以互换处理。
我会说 HAL 使用设备驱动程序提供硬件抽象。从某种角度来看,没有驱动程序,任何设备都无法工作。HAL 领先一步,为应用程序提供了一个统一的(或“更简单的”)API。
您可以绕过 HAL 并直接与设备驱动程序对话,但您不能绕过设备驱动程序并直接与硬件对话(这最后一句话通常或多或少有效,具体取决于操作系统和环境)。
主要区别在于它们为什么提供抽象。HAL 抽象处理器,设备驱动抽象不同的设备。所以从某种意义上说,HAL 是 PC 中处理器或主板的“设备”驱动程序。
过去,每个编写应用程序的程序员也会为他们想要支持的各种硬件编写驱动程序。所以,如果你有一个想法开发一个需要使用网络功能的应用程序,你还需要知道如何为网卡编写硬件驱动程序。
然后来到了HAL。
因此,现在不是让您的软件和操作系统直接接触到硬件,而是在两者之间有一个称为 HAL 的层。HAL 位于操作系统层之下或内部。
现在没有人被允许访问硬件,除非他们通过硬件抽象层(HAL)来访问。仅允许 HAL 访问硬件。
现在它是标准的东西。开发人员所要做的就是让游戏/应用程序与 HAL 一起工作。
现在我们有了驱动程序。驱动程序告诉 HAL 如何访问实际硬件。因此,无论谁制造声卡,他们只需制造一个驱动程序,告诉 HAL 如何访问该声卡。
所以总的来说,我们的软件与 HAL 交互,HAL 使用驱动程序与硬件交互。我们正在告诉 HAL 如何使用驱动程序访问该声卡或网卡等。