多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
Android系统的硬件抽象层(Hardware Abstract Layer,HAL)运行在用户空间中,它向下屏蔽硬件驱动模块的实现细节,向上提供硬件访问服务。通过硬件抽象层,Android系统分两层来支持硬件设备,其中一层实现在用户空间中,另一层实现在内核空间中。传统的Linux系统把对硬件的支持完全实现在内核空间中,即把对硬件的支持完全实现在硬件驱动模块中。 Android系统为什么要把对硬件的支持划分为两层来实现呢?我们知道,一方面,Linux内核源代码是遵循GPL协议的,即如果我们在Android系统所使用的Linux内核中添加或者修改了代码,那么就必须将它们公开。因此,如果Android系统像其他的Linux系统一样,把对硬件的支持完全实现在硬件驱动模块中,那么就必须将这些硬件驱动模块源代码公开,这样就可能会损害移动设备厂商的利益,因为这相当于暴露了硬件的实现细节和参数。另一方面,Android系统源代码是遵循Apache License协议的,它允许移动设备厂商添加或者修改Android系统源代码,而又不必公开这些代码。因此,如果把对硬件的支持完全实现在Android系统的用户空间中,那么就可以隐藏硬件的实现细节和参数。然而,这是无法做到的,因为只有内核空间才有特权操作硬件设备。一个折中的解决方案便是将对硬件的支持分别实现在内核空间和用户空间中,其中,内核空间仍然是以硬件驱动模块的形式来支持,不过它只提供简单的硬件访问通道;而用户空间以硬件抽象层模块的形式来支持,它封装了硬件的实现细节和参数。这样就可以保护移动设备厂商的利益了。 本章介绍Android系统的硬件抽象层的目的在于认识Android系统的体系结构,因为它的实现和使用依次涉及Android系统的硬件驱动模块、硬件抽象层、外部库和运行时库层、应用程序框架层和应用程序层等,如图2-1所示。 ![](https://box.kancloud.cn/236faa587cda17991b5f2e5a35256b1b_544x413.jpg =544x413) 接下来,我们就以硬件抽象层为中心,首先在Android系统的内核空间中为一个硬件开发驱动程序,接着在用户空间中为该硬件添加一个硬件抽象层模块,并且在应用程序框架层中添加一个硬件访问服务,最后开发一个应用程序来访问该硬件服务。这样我们就可以从下到上来认识Android系统的体系结构。