HAL层和设备驱动程序

11
在Linux中,HAL提供硬件抽象和设备驱动程序也提供硬件抽象。您能否请明确两者之间的区别?

阅读维基百科的HALudev页面。 - Basile Starynkevitch
2
顺便提一句,HAL是上个世纪的东西了... - Eddy_Em
我已经阅读了维基百科和其他文献,但无法区分这两者。 - Waqas
这完全取决于您的设备类型。例如,如果是PCI设备,您无法在没有“驱动程序”(内核模块)的情况下工作。但是,如果您的设备是USB,您可以使用libusb在用户空间工作。因此,对于这些设备,您有一个通用的内核模块和许多客户端实用程序(每个硬件一个)。Udev将帮助您运行所需的实用程序或加载所需的内核模块。 - Eddy_Em
4个回答

14
设备驱动程序在特定缓冲区和控制标志块位置与特定设备进行通信。硬件抽象层抽象了特定设备的工作细节。例如,USB鼠标的驱动程序与PS2鼠标的驱动程序非常不同,但在HAL层,它们都是鼠标,并且可以互换对待。

7
我认为,HAL利用设备驱动程序提供硬件抽象。从某种角度来看,没有驱动程序,任何设备都无法工作。HAL更进一步提供了一个统一(或“更容易”)的应用程序API。
你可以绕过HAL直接与设备驱动程序交互,但不能绕过设备驱动程序直接与硬件交互(这句话在一般情况下更或多或少是有效的,取决于操作系统和环境)。

或者,HALs 提供了更通用的 API。 - Technophile

4

主要的区别在于它们提供抽象的目标不同。HAL抽象处理器,设备驱动程序抽象不同的设备。因此,从某种意义上说,HAL是PC中处理器或主板的“设备”驱动程序。


这是我如何设计嵌入式固件解决方案的方式,包括描述和文件组织。 - J-Dizzle

2
从前,编写应用程序的程序员也会编写各种硬件的驱动程序来支持他们所需的功能。因此,如果您想开发一个需要使用网络功能的应用程序,您还需要知道如何为网络卡编写硬件驱动程序。

然后出现了HAL。
因此,现在软件和操作系统不再直接访问硬件,而是有一个名为HAL的中间层。HAL位于操作系统层下面或内部。
现在除了通过硬件抽象层(HAL)进行访问之外,没有人被允许访问硬件。只有HAL可以访问硬件。
现在这是标准的东西。所有开发人员只需要使游戏/应用程序与HAL配合工作即可。
现在我们有了驱动程序。驱动程序告诉HAL如何访问实际的硬件。因此,制造声卡的公司只需制作一个驱动程序,告诉HAL如何访问该声卡。
因此,总体而言,我们的软件与HAL交互,HAL使用驱动程序与硬件交互。我们正在使用驱动程序告诉HAL如何访问声卡或网络卡等。

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