硬體抽象層

硬體抽象層(,缩写HAL),或更准确地说是硬件注释库。是类UNIX操作系统的一个软件子系统,用于提供硬件抽象功能。需要注意的是,类Unix系统中的HAL与Windows NT内核中的HAL概念并无关联——后者负责处理内核中的某些平台特定核心功能,例如中断路由。

Linux操作系统上的HAL最初由Havoc Pennington提出构想。该项目后来成为freedesktop.org的组成部分,并曾是GNOME和KDE桌面环境软件栈的核心组件。

HAL属于自由软件,采用GNU通用公共许可证和学术自由许可证的双重授权模式。

原理
HAL的设计初衷在于:使应用程序能够通过简洁、可移植且抽象的API来发现和调用宿主系统的硬件资源,而无需考虑底层硬件的具体类型。传统上,操作系统内核负责为系统运行的硬件提供抽象接口。应用程序通过系统调用接口,或对设备节点执行文件I/O操作,经由这些抽象层与硬件进行通信。这种方式足以应对早期桌面计算时代的简单硬件环境。

然而,计算机硬件的复杂度日益提升,而Unix/Linux内核所提供的抽象机制未能跟上服务器和桌面计算机上现已普及的多样化设备与外设类型的发展步伐。此外,大多数现代总线已具备热插拔能力,且可能具有非扁平的拓扑结构。因此,设备的发现或状态变更往往难以通过系统调用接口或Unix进程间通信机制进行有效追踪。这种复杂性迫使应用程序开发者不得不自行重新实现硬件支持逻辑。

部分设备还需要特权辅助程序来完成使用前的准备工作。这些程序的调用方式往往难以通过Unix/Linux权限模型进行直观表达(例如,仅允许已登录视频控制台的用户加入无线网络)。应用程序开发者不得不借助setuid二进制文件或运行服务守护进程来实现自身的访问控制和权限分离机制,而这每次都可能引入潜在的安全漏洞。

实现
在软件栈结构中,HAL位于应用程序编程接口(API)之下,而应用层(通常以高级语言编写)则位于API之上,通过调用API中的函数与硬件进行通信。

HAL是一个单一守护进程,负责发现、枚举并仲裁对宿主计算机上大多数硬件的访问。应用程序通过D-Bus进程间通信机制与HAL进行通信,该机制将硬件抽象为基于对象的远程过程调用(RPC)机制。每个逻辑硬件设备均被表示为一个D-Bus对象,其总线地址用作唯一标识符。设备涵盖磁盘分区、可见无线网络等抽象实体。设备功能通过D-Bus接口对外暴露,其状态则通过属性(即键值对集合)进行访问。HAL将这些硬件事件作为信号广播至相应对象;应用程序可监听这些信号,并对信号所指示的硬件事件作出响应——例如数码相机插入、插入光盘或笔记本电脑合盖等事件。

Windows NT内核中的硬件抽象层
在Microsoft Windows系统中,HAL基本上可视为针对主板的驱动程序,它允许高级计算机语言指令与底层组件进行通信,但同时阻止对硬件的直接访问。

Windows NT内核在内核空间中设有一个HAL,位于硬件与ntoskrnl.exe文件所包含的执行服务之间,对应文件路径为%WINDOWS%\system32\hal.dll。该设计使得Windows NT内核模式代码能够移植到多种处理器架构(具有不同内存管理单元架构)以及多种I/O总线架构的系统上;当针对相应系统的指令集进行编译后,大部分代码可在这些系统上无需修改直接运行。例如,SGI基于Intel x86架构的工作站并非IBM PC兼容工作站,但借助HAL机制,Windows 2000得以在其上运行。

自Windows Vista和Windows Server 2008起,系统会在启动过程中自动确定所使用的HAL。

弃用
截至2026年,大部分Linux发行版[https://wiki.ubuntu.com/Halsectomy]以及FreeBSD,还有KDE、GNOME和X.org等项目均已开始弃用HAL,因其已"演变为庞大、单一且难以维护的臃肿系统"。在Linux系统中,HAL正逐步被整合进udev(包括主程序udev、libudev库及udev-extras)以及现有的udev和内核功能中。对于FreeBSD等非Linux系统,其替代方案为devd。最初曾计划以新型守护进程DeviceKit来替代HAL的某些功能,但2009年3月,DeviceKit被弃用,相关代码被整合至udev-extras软件包并入udev,部分功能现已直接迁移至udev本体。

目前只有部分缺乏udev或devd等替代方案的发行版仍在使用HAL。

参考文献
參見
*ACPI
*BIOS
*UEFI
*韌體
*開發板支援套裝軟體

外部連結
*[https://web.archive.org/web/20060615124151/http://freedesktop.org/wiki/Software_2fhal Linux HAL]
*[https://web.archive.org/web/20070302111714/http://www.msservermag.com.tw/technicwords/021003.aspx "開機"萬言書- PART III],講解Windows的HAL

评论 (0)

  • 还没有评论,来抢沙发吧。