HAL硬件抽象层笔记

HAL层概述:

本意就是为了规避GPL的风险,保护厂商利益。

Linux内核源代码版权遵循GNU License,而Android源代码版权遵循Apache License,前者在发布产品时,必须公布源代码,而后者无须发布源代码。如果把对硬件支持的所有代码都放在Linux驱动层,那就意味着发布时要公开驱动程序的源代码,而公开源代码就意味着把硬件的相关参数和实现都公开了。所以,Android被踢出了Linux内核主线代码树中,意味着什么呢?移植ROM的时候内核不能拿过来直接用,原因之一是因为驱动缺失,所以移植还要自己编写/system/lib/libhardware*.so

HALAndroid对硬件的支持分为两部分,一部分是用户空间,一部分是内核空间。前者负责驱动作读写数据等指令,后者只负责和硬件的一些简单交互,所以公开源码就不涉及到厂商利益了。

 


简单应用驱动调用图解:由上至下,应用层通过Binder IPC访问系统服务,系统服务通过JNI本地函数调用访问HAL Module(c/c++),在Android对应的目录是/lib/libhardware*,之后,通过设备文件访问内核驱动。

 

总结:HAL存在的必要性,两个部分的职能,以及一张图。

 

HAL层是为了规避GPL协议而定制的,分为用户空间和内核空间两部分,用户空间负责硬件逻辑动作,内核空间驱动只是简单的交互;应用程序通过HAL PCI通讯系统服务,系统服务通过JNI调用HAL Module(libhardware.so),最后通过文件系统访问内核中的驱动。

你可能感兴趣的:(HAL硬件抽象层笔记)