系统架构设计笔记(94)—— 硬件抽象层

2,828 阅读6分钟

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。

1 简介

硬件抽象层技术最初是由 Microsoft 公司为确保 Windows NT 的稳定性和兼容性而提出的。针对过去 Windows 系列操作系统经常出现的系统死机或崩溃等现象, Microsoft 总结发现,程序设计直接与硬件通信,是造成系统不稳定的主要原因。在得出这个结论的基础上,微软公司在 Windows NT 上取消了对硬件的直接访问,首先提出了硬件抽象层 (Hardware Abstraction Layer ,简称 HAL ) 的概念,硬件抽象层就是: “ 将硬件差别与操作系统其他层相隔离的一薄层软件,它是通过采用使多种不同硬件在操作系统的其他部分看来是同一种虚拟机的做法来实现的。 “

后来,这种 HAL 设计思路被一些嵌入式操作系统参考,其系统内核被分成两层,上层称为 “ 内核 (Kernel)” ,底层则称为 “ 硬件抽象层 ”。

Kernel /ˈkɜːrnl/ The most material and central part; the core;

硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。

硬件抽象层是一个编程层,允许计算机操作系统在逻辑层而不是硬件层与硬件设备交互。 Windows 2000就是支持硬件抽象层的操作系统之一。操作系统核心或者硬件驱动程序都可以调用硬件抽象层。无论哪种情况,调用程序都不用了解硬件的具体设计细节,只需要给出抽象层所需的参数即可 。

2 思想

嵌入式操作系统的设计是一个涉及嵌入式软件 、 硬件的方方面面的非常复杂的问题,解决这个问题可基于这样一个基本原理:问题分解,各个击破。设计易于移植的嵌入式平台,应遵循层次化 、 模块化和对象化的设计方法。

(1)层次化思想

层次化设计对于嵌入式操作系统而言,体现在嵌入式操作系统的纵向结构上。为了适应多种硬件平台,将操作系统划分出来一个可以直接和硬件通讯的层次,然后为其上层提供抽象支持,下层通过 API 的形式向上层提供服务。这样上层在进行硬件操作时,不需要了解设备的具体细节,从而大大减少系统理解和开发的复杂度。所以,层次化的方法主要有以下优点:节省成本 、 易于理解 、 易于扩展 、 易于排错。

(2)模块化思想

模块化最大特点就是将接口和实现分离开来,将具体的功能块隐藏在抽象的接口背后,以保证每个模块可以在不影响其他模块的情况下进行改变。这样,可将模块之间的依赖关系仅仅限定于接口。模块化方法与层次化方法不同,软件模块之间是相互独立的关系,而不是层次之间相互依赖的关系。

(3)对象化思想

就当前的目的来说,对象是结构化使用模块的方法。面向对象设计方法将数据与数据上的操作封装在对象这个模块实体中,外界不能直接对对象内部进行访问和操作,只能通过消息的方式间接访问。因此,面向对象设计方法能够使软件开发人员更加容易理解,并且也提高了软件的扩展性 、 维护性和重用性。

3 原理

嵌入式系统是一类特殊的计算机系统。它自底向上包括3个主要部分 : 硬件环境 、 嵌入式操作系统和嵌入式应用程序。硬件环境是整个嵌入式操作系统和应用程序运行的硬件平台,不同的应用通常有不同的硬件环境 ; 因此如何有效地使嵌入式操作应用于各种不同的应用环境,是嵌入式操作系统发展中所必须解决的关键问题。

硬件抽象层通过硬件抽象层接口向操作系统以及应用程序提供对硬件进行抽象后的服务。当操作系统或应用程序使用硬件抽象层 API 进行设计时,只要硬件抽象层 API 能够在下层硬件平台上实现,那么操作系统和应用程序的代码就可以移植。这样,原先嵌入式系统的3层结构逐步演化为一种4层结构。下图显示了引入硬件抽象层后的嵌入式系统的结构。

在整个嵌入式系统设计过程中,硬件抽象层同样发挥着不可替代的作用。传统的设计流程是采用瀑布式设计开发过程,首先是硬件平台的制作和调试,而后是在已经定型的硬件平台的基础上再进行软件设计。由于硬件和软件的设计过程是串行的,因此需要很长的设计周期 ; 而硬件抽象层能够使软件设计在硬件设计结束前开始进行,使整个嵌入式系统的设计过程成为软硬件设计并行的 V 模式开发过程,如下图所示。

这样两者的设计过程大致是同时进行的或是并发的,缩短了整个设计周期。

4 特点

  • 硬件抽象层与硬件密切相关性;
  • 硬件抽象层与操作系统无关性;
  • 硬件抽象层接口定义的功能应包含硬件或系统所需硬件支持的所有功能;
  • 硬件抽象层接口定义应该简单明了,如果定义太多接口,会增加软件模拟的复杂性;
  • 具有可测性的接口设计有利于系统的软硬件测试和集成。