爱学习的小伙伴们,你们知道什么是硬件抽象层吗?不知道的话跟着小编一起来学习了解什么是硬件抽象层。
硬件抽象层介绍
(Hardware Abstraction Layer )
硬件抽象层是位于操作系统内核与硬件电路之间的接口层,其目的在于将硬件抽象化。它隐藏了特定平台的硬件接口细节,为操作系统提供虚拟硬件平台,使其具有硬件无关性,可在多种平台上进行移植。 从软硬件测试的角度来看,软硬件的测试工作都可分别基于硬件抽象层来完成,使得软硬件测试工作的并行进行成为可能。
硬件抽象层大概分为以下几点HAL:
*上层软件
*虚拟驱动,设置管理模块
*内部通信SERVER
*内部以太网
*内部通信CLIENT
*用户接入口
硬件抽象层接口的定义和代码的设计具有一下特点:
*硬件抽象层具有与硬件的密切相关性
*硬件抽象层具有与操作系统无关性
*接口定义的功能应包含硬件或系统所需硬件支持的所有功能
*接口定义简单明了,太多接口函数会增加软件模拟的复杂性
*具有可测性的接口设计有利于系统的软硬件测试和集成
硬件抽象层对用户设备接口的功能模拟主要由虚拟驱动模块完成,包括数据包的收发及协议报文的预处理等工作,为上层协议软件提供标准的API函数, 而对用户设备的接口管理则由上层网络管理软件通地设备管理模块对其进行管理配置及监控,内部通信模块运行于内部队以太网络,协调各模块之间的功能接口,保证从处理单元与主处理单元之间实时可靠的数据传输.
speically in Android
Framework&Application
------------------------------------
External lib&Runtime
------------------------------------
HAL
Sensor stub stub stub
------------------------------------
Linux Device Driver
------------------------------------
图上是现在Android HAL 的所在位置,从这张架构图我们知道,HAL 的目的是为了把 Android framework 与 Linux kernel 完整隔开。让 Android 不至过度依赖 Linux kernel,有点像是kernel independent的意思,让 Android framework 的开发能在不考虑驱动程序的前提下进行发展。
HAL module架构
struct hw_module_t;
struct hw_module_methods_t;
struct hw_device_t;
hw_module_methods_t
---------------------------
open()
hw_module_t
----------------
tag:uint32_t
, , , , ,
hw_device_t
---------------
close()
HAL 使用方法
举Sensor为列子
(1)Native code通过hw_get_module调用获取HAL stub:
hw_get_module (SENSOR_HARDWARE_MODULE_ID, (const hw_module_t**)&module)
(2)通过继承hw_module_methods_t的callback来open设备:
module->methods->open(module,
SENSOR_HARDWARE_MODULE_ID, (struct hw_device_t**)device);
(3)通过继承 hw_device_t的callback来控制设备:
sSensorDevice->set_on(sSensorDevice, sensor);
sSensorDevice->set_off(sSensorDevice, sensor);