Android中HAL层与内核驱动之间的关系

首先,Android的HAL是为了一些硬件提供商提出的“保护proprietary”的驱动程序而产生的东东,简而言之,就是为了避开linux kernel的GPL license的束缚。Android把控制硬件的动作都放到了user space中,而再kernel driver里面只有最简单的读写寄存器的操作,而完全去掉了各种功能性的操作(比如控制逻辑等),这些能够体现硬件特性的操作都放到了Android的HAL层,而Android是基于Aparch的license,因此硬件厂商可以只提供二进制代码,所以说Android只是一个开放的平台,并不是一个开源的平台。

从网上看到的这样一段话,还存在的疑问是,1.既然“把控制硬件的动作都放到了user space中“,那kernel driver的作用是什么,
2.HAL层与内核驱动层之间是怎么交互的,他们之间的接口函数是什么呢?

====================

内核里的设备驱动其实就是实现硬件的各种功能及调用接口, 至于怎么使用这硬件功能由应用程序的调用来决定的。

应用程序调用内核驱动的接口基本是统一的标准接口, 也就是所谓的系统调用接口。Android里的HAL层其实就是把调用内核驱动实现的功能封装成一个个的类,供java来调用

====================

针对寄存器和IO级别的操作只能在内核完成,因为这些操作需要读写一些应用层无法看到的地址。而其他的组合逻辑交给HAL层来完成,这样的话必须GPL的内核驱动代码只包含了最基础的操作,而真正的业务交给不开源的HAL来操作。比如说基于I2C的加密芯片驱动,你在内核驱动层只实现I2C读写,关于加密的逻辑和命令全部在HAL实现,在HAL中组织数据包,调用I2C驱动给出的接口实现功能。

====================

HAL层最终还是要进行Linux系统调用打开设备文件,Android做了Java到C/C++的接口,记得是叫JNI层吧,按照Google定好的规则进行编码,就可以实现Java到系统调用之间的链接

  • 1
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

flybirding10011

谢谢支持啊999

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值