欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  网络运营

【Android 系统】关于HAL硬件抽象层的一些理解。

程序员文章站 2022-06-15 08:38:24
当初学习Android系统的时候没有认真学习,不只是学习Android系统,所有的学习都是没有深入思考和深入理解。加入现有公司让我学习到最多的就是多问自己为什么,顺着流程问。深入思考的学习和理解。这篇文章是以老罗的《Android系统源代码情景》一书中硬件抽象层这一章为基础的,去理解hal硬件抽象层。Android为什么要加一层HAL?为了规避Linux系统GPL协议(详细可去自查,简单说,要符合这个协议的话,你的代码要开源,不符合硬件厂商的利益要求)。一、Android如何通过HAL做....

当初学习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方法,去加载厂商硬件模块,再调用到驱动接口。

本文地址:https://blog.csdn.net/twk121109281/article/details/108714057