写一个很难解的BUG 2019-06-28 17:15 采纳率: 0%
浏览 623

有JNI为什么还用用HAL?

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

  • 写回答

2条回答 默认 最新

  • 普通网友 2019-06-28 20:17
    关注

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

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

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

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记