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

tys1991 2017-07-31 05:22:27
首先,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层与内核驱动层之间是怎么交互的,他们之间的接口函数是什么呢
...全文
1118 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
猪头三小队长 2017-08-11
  • 打赏
  • 举报
回复
HAL层最终还是要进行Linux系统调用打开设备文件,Android做了Java到C/C++的接口,记得是叫JNI层吧,按照Google定好的规则进行编码,就可以实现Java到系统调用之间的链接。
猪头三小队长 2017-08-11
  • 打赏
  • 举报
回复 1
针对寄存器和IO级别的操作只能在内核完成,因为这些操作需要读写一些应用层无法看到的地址。而其他的组合逻辑交给HAL层来完成,这样的话必须GPL的内核驱动代码只包含了最基础的操作,而真正的业务交给不开源的HAL来操作。比如说基于I2C的加密芯片驱动,你在内核驱动层只实现I2C读写,关于加密的逻辑和命令全部在HAL实现,在HAL中组织数据包,调用I2C驱动给出的接口实现功能。
jklinux 2017-08-02
  • 打赏
  • 举报
回复
引用 楼主 tys1991 的回复:
首先,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来调用.

1,318

社区成员

发帖
与我相关
我的任务
社区描述
主要是开发驱动技术
社区管理员
  • 驱动程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧