Android HAL学习 及 与BSP的区别
参考链接:
1、https://www.cnblogs.com/looner/articles/11579335.html
2、https://blog.csdn.net/leesan0802/article/details/124087630
3、https://zhuanlan.zhihu.com/p/336531442
在HAL的学习之前,我们来先了解一下Android的目录结构吧。
可以看到HAL位于库层和Linux内核层之间,那么在三个问题中开始本模块的学习吧。
1、HAL是什么
(1)HAL的全拼是hardware abstraction library,即硬件抽象层
(2)层次方面,是处于库层和Linux内核层之间
2、为什么需要HAL层
(1)并不是所有的硬件设备都有标准的Linux kernel接口
(2)HAL层的存在可以规避GPL协议,保护芯片厂商的利益
(3)针对某些硬件,Android有一些特殊的需求
3、HAL层怎么实现
旧架构的思想:让JNI部分以直接函数的形式调用HAL module
问题:会出现代码重如入的现象
新的HAL架构:同样是以.so的形式存在,但是将.so隐藏起来了(解决了代码重入的现象)
通过前面的介绍,大家应该对于HAL层有了基本的了解,接下来就来实现一下HAL层代码的编写。
1、定义描述HAL层的结构体
结构体元素:
①ID(根据ID找到对应模块)
②methods(操作方法)
2、上层调用的实现原理:
上层通过ID,得到包含调用信息结构体的地址,然后根据偏移就可以找到封装完成的、需要调用的函数指针,以此实现库层到底层(HAL层会封装内核信息的接口)的调用
嵌入式中BSP的概念是什么
BSP定义
硬件层(linux驱动层)与软件层之间为中间层,也称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP),
它将系统上层软件与底层硬件(linux驱动层)分离开来,使系统的底层驱动程序与硬件无关,上层软件开发人员无需关心底层硬件的具体情况,根据 BSP 层提供的接口即可进行开发。
中间层:硬件层与软件层之间称为中间层,可以称为硬件抽象层(Hardware Abstract Layer,HAL)或板级支持包(Board Support Package,BSP)。