(1)为什么会添加硬件抽象层???
如果不添加硬件抽象层,我们在Android所用的Linux内核中添加和修改代码,就要遵循GPL协议,将代码公开。
把对硬件的驱动程序的代码公开,会损害移动设备厂商的利益,因为这相当于暴露了硬件的实现细节和参数。
所以android源代码是遵循Apache License协议,它允许移动设备厂商添加修改android源代码,而不必公开源代码。
一个折中的解决方案便是将对硬件的支持分别实现呆内核空间和用户空间,其中,内核空间仍然以硬件驱动模块来支持,不过只提供简单的
硬件访问通道;而用户空间已硬件抽象层模块形式支持,它封装了硬件的实现细节和参数。
(2)android从底层到上层的结构。
内核驱动模块 ------------> 硬件抽象层模块 ------------> 硬件访问服务模块 ------------>android应用程序