当初学习Android系统的时候没有认真学习,不只是学习Android系统,所有的学习都是没有深入思考和深入理解。加入现有公司让我学习到最多的就是多问自己为什么,顺着流程问。深入思考的学习和理解。这篇文章是以老罗的《Android系统源代码情景》一书中硬件抽象层这一章为基础的,去理解hal硬件抽象层。
Android为什么要加一层HAL?
为了规避Linux系统GPL协议(详细可去自查,简单说,要符合这个协议的话,你的代码要开源,不符合硬件厂商的利益要求)。
一、Android如何通过HAL做到规避GPL协议
1、hal硬件抽象层又是如何来规避的
Android系统将硬件驱动实现分成两部分(用户空间和内核空间)来实现
内核空间:驱动模块来实现,只提供简单的访问通到。这部分是要符合GPL协议的。
用户空间:HAL层,硬件厂商实现,封装了硬件驱动的具体实现和详情。这部分只需要符合AL协议。
二、Android上层应用是如何加载到HAL相关驱动的
线路图:应用--->应用框架层--->JNI->通用硬件模块->硬件模块->内核驱动接口.
具体一点:app---framework---jni---hareward.so---xxx.default.so---kernel
详情可以参考:android HAL 教程(含实例)
三、总结
也就两点:
1、为什么要用HAL层
---隔离Linux内核的GPL协议
2、HAL的使用流程
---调用驱动接口时,调用到通用硬件模块(hareward.so),通用硬件模块通过hw_get_moulde方法,去加载厂商硬件模块,再调用到驱动接口。