有JNI为什么还用用HAL?

JNI已经可以使用C代码,已经可以操作设备文件了,为什么还要通过HAL进行一层封装呢?感觉多此一举啊

这个用C语言写代码和这个HAL层无关的,我认为,由HAL层的原因如下:
1:协议方面的原因,因为我们知道所有的Linux程序都必须要遵循GPL协议,也就是全部开源协议。而对于有些企业和个人其并不想完全将自己的劳动成果或者是知识产权吧完全公开,所以就在Linux驱动程序的基础之上,在弄了一个HAL层。由于对于一个驱动程序来说,其主要包括两个部分,访问寄存器的代码和业务逻辑代码。而对于访问硬件寄存器的代码,并没有什么秘密可言,无非就是一些Linux内核向寄存器发号施令的标准函数(如ioread32、iowrite32等),所以一个驱动的核心部分应该是在业务逻辑代码上,而开发者将这些业务逻辑的代码放在HAL层,由于HAL层属于用户空间部分,所以并不要遵循Linux的GPL协议,因而HAL便得以广泛应用。

2:统一调用接口,我们知道Linux驱动程序的调用接口复杂,不统一,而HAL提供了标准的调用接口,这样很方便

3:针对一些特殊要求,例如有些硬件,可能需要访问用户空间的资源,而由于Linux驱动程序是放在内核空间的,所以加入存放用户空间的HAL有利于对用户空间资源的访问。

1. 你说GPL的问题,我在JNI实现同样可以避免GPL的问题

2. Linux驱动接口并没有你说的杂乱问题,再者我在JNI层兼容杂乱的Linux驱动层和弄一个HAL层来兼容不是一个意思吗

3. JNI同样可以访问用户控件,而且驱动层都是可以访问用户空间资源的。