Android的硬件抽象层,简单来讲,就是对Linux内核驱动程序的封装,向上提供接口,屏蔽低层的实现细节。即把对硬件的支持分红了两层,一层放在用户空间,一层放在内核空间,其中,硬件抽象层运行在用户空间,而Linux内核驱动程序运行在内核空间。Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,然后者无须发布源代码。若是把对硬件支持的全部代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了。所以,Android才会想到把对硬件的支持分红硬件抽象层和内核驱动层,内核驱动层只提供简单的访问硬件逻辑。Android放在内核空间的驱动程序对硬件的支持是不完整的,把Linux内核移植到别的机器上去时,因为缺少硬件抽象层的支持,硬件就彻底不能用了,这也是为何说Android是开放系统而不是开源系统的缘由。框架
学习Android硬件抽象层,对理解整个Android整个系统,都是极其有用的,它从下到上涉及到了Android系统的硬件驱动层、硬件抽象层、运行时库和应用程序框架层等。学习
在学习Android硬件抽象层的过程当中,咱们将会学习如何在内核空间编写硬件驱动程序、如何在硬件抽象层中添加接口支持访问硬件、如何在系统启动时提供硬件访问服务以及 如何编写JNI使得能够经过Java接口来访问硬件。接口