应用与HAl进行交互

本文详细介绍了Android应用调用硬件抽象层(HAL)的三种方式:通过framework与native交互,直接通过HIDL和HAL交互,以及通过JNI直接与HAL交互。重点讲述了通过HIDL生成接口代码的过程,包括创建HIDL接口,使用hidl-gen工具转换,并更新Android.bp文件,以及添加Selinux权限的步骤。
摘要由CSDN通过智能技术生成

Android应用调用Hal层,底层都是通过binder实现,

方式1、通过framework框架与native交互,从而和hal层进行交互

主要方式为注册系统服务,通过getSystemService(test)获取自定义系统服务,test通过注册jni和native交互,调用Hidl Service 从而和hal进行交互

方式2、应用通过HIDL和hal进行交互(如下例子)

自己实现jni模块,在应用内通过System.load(“test.so”),和hal进行交互

方式3、应用通过jni直接和hal进行交互

1、创建vendor/huawei/interface/lyx/1.0目录在该目录下创建相应HIDL接口和相应实现
ICallInterface.hal
package vendor.huawei.hardware.lyx@1.0;
        interface ICallInterface{
        clearRt(int32_tnum)generates(string ret);
};

2、使用HIDL-GEN工具生成相应实现系统定义的所有的.hal接口,都是通过hidl-gen工具转换成对应的代码。
hidl-gen源码路径:system/tools/hidl,是在ubuntu上可执行的二进制文件。
使用方法:hidl-gen-o output-path-L language(-r interface-root)fqname
例子:hidl-gen-o.-Lc++-impl-rvendor.huawei.hardware:vendor/huawei/interfaces-randroid.hidl:system/libhidl/transportvendor.huawei.hardware.lyx@1.0
参数说明:-L:语言类型,包括c++,c++-headers,c++-sources,export-header,c++-impl,java,java-constants,vts,makefile,androidbp,androidbp-impl,hash等。hidl-gen可根据传入的语言类型产生不同的文件。
         fqname:完全限定名称的输入文件。比如本例中android.hardware.gunder@1.0,要求在源码目录下必须有vendor/huawei/interfaces/lyx/1.0/目录。对于单个文件来说,格式如下:package@version::fileName,比如android.hardware.gunder@1.0::types.Feature对于目录来说格式如下package@version比如android.hardware.gunder@1.0。
          -r:格式package:path,可选,对fqname对应的文件来说,用来指定包名和文件所在的目录到Android系统源码根目录的路径。如果没有制定,前缀默认是:android.hardware,目录是Android源码的根目录。
          -o:存放hidl-gen产生的中间文件的路径。生成的CallInterface.cpp和CallInterface.h复制到venodr/huawei/libhardware/lyx/1.0下

可在Android.bp定义

hidl_package_root {

    name: "interface",

    path: "vendor/huawei/interface",

}


                
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值