windows内核开发学习笔记二十六:内核的关键组件之HAL抽象层

 

     HAL(Hardware Abstraction Layer,硬件抽象层)Windows NT的一个目标是使操作系统可跨平台移植。理想情况下,当一种新机器问世时,它应该可以仅仅使用新机器的编译器来重新编译这个操作系统,就让他首次运行。但是,现实中并不能这样做。虽然上层的操作系统能够完全移植(因为它们的处理大多是内部数据结构),但底层处理的是设备寄存器、中断、DMA和其他的硬件特性,这些都是因机器而不同的。即使大部分底层代码是用C语言编写的,它也不能仅仅从X86上拿出来放到Alpha上,然后重新编译、重新启动,因为X86和Alpha之间存在许多小的硬件差别,它们和不同的指令集相关并且不能被编译器隐藏。
     微软认识到了这一点并尝试做一个很小的底层,以隐藏不同机器间的差异,这一层被称为硬件抽象层HAL。HAL的作用是将操作系统的其余部分表示为抽象的硬件设备,特别是去除了真正硬件所富含的瑕疵和特质。这些设备表现为操作系统的其它部分和设备可以使用的独立于机器的服务的形式(函数调用和宏)。通过使用HAL服务和间接硬件寻址,当移植到新的Windows设计的关键要素之一是,它能被移植到各种不同的硬件平台上。 硬件抽象层是使得这种移植性成为可能的一个关键部分。 HAL是一个可加载的、内核模式的模块,它提供了针对Windows当前运行所在的硬件平台的低层接口。它隐藏了与硬件相关的细节,比如I/O接口、中断控制器,以及多处理器通信机制——任何与体系结构相关或者与机器相关的功能 。
     所以, Windows内部组件以及用户编写的设备驱动程序并不直接访问硬件;相反,当它们需要获得与平台相关的信息时,它们可以通过调用HAL例程来保持可移植性。出于这一原因,针对这些HAL例程,也有相应的文档包含在Windows DDK中。要想找到更多有关HAL及其在设备驱动程序中用法的信息,请参考DDK。
      虽然 Windows随带了几个HAL,但是在安装的时候只有一个HAL被选中,并且被拷贝到系统磁盘上,其文件名为Hal.dll(其他的操作系统,比如VMS,在系统引导的时候选择一个等价于HAL的模块)。因此,如果支持两个不同处理器的HAL有所不同的话,你就不能这样假设:一个x86已安装系统的系统磁盘也可以在另一个处理器上引导。
  在/Windows/Driver Cache/i386/Driver.cab中的x86 HAL列表

HAL文件名

所支持的系统

Hal.dll

标准PC

Halacpi.dll

高级配置和电源接口(ACPI) PC

Halapic.dll

高级可编程中断控制器(APIC) PC

Halaacpi.dll

APIC ACPI PC

Halmps.dll

多处理器PC

Halmacpi.dll

多处理器ACPI PC

Halborg.dll

Silicon图形工作站(仅仅在Windows 2000中才有,市场上已经不再销售)

Halsp.dll

Compaq SystemPro (仅仅在Windows XP中才有)

注     从Windows Server 2003开始,在Windows基本系统中不再随带与特定厂商相关的HAL。

硬件抽象层:向下屏蔽硬件驱动模块的实现细节,向上提供硬件服务。

硬件抽象层的编写规范:

  • 以模块的形式管理各个硬件的访问接口。
  • 模块用结构体 hw_module_t 来描述。
  • 硬件设备用结构体hw_device_t 来描述。
  • 每个模块对应一个动态链接库文件。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jyl_sh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值