android hidl 总结

google HIDL的定义

1 android 提供了一套system img与vendor image 通信的机制,为hal定义了一套接口语言,类似aidl

2 HIDL其实也是一套binder 通信机制,只是该通信机制的driver使用的是hw binder。android 提供了对应的hw servicemanager,IPCThreadState和ProcessState的等binder code,与正常binder功能差不多。

3 定义的HIDL 类似aidl,是一个文件,该文件中定义了通信的接口。有了该接口文件,android 系统会自动生成对应的client和server code,这些code生成在out 目录下,已经内部封装好,可以直接使用。

4 hidl-gen 是上述3中自动生成的工具,code是在/system/tools/hidl/ 中。

5 生成的code 内部有****ALL,Bp****, Bs***, Bn***, ALL中有getService和registerService的实现。

6 hwservicemanager与servicemanager 相同,都是提供查询的功能,hidl register的service都是存放给它进行管理,有使用map进行管理,不知最近版本是否有修改。

7 HIDL有几种模式:passthrough 、binderized

8 HIDL 定义了一些基本数据结构,hidl_string/hidl_handle/hidl_memory/hidl_vec 等

9 HIDL 分为passthrough和binderize两种, passthrough是兼容旧的hal,client/server 同进程, binderied则client和server是不同进程。

10 hidl 可以直接生成java 类,HIDL生成的代码里面,实现了jni的各种注册、通信等操作。避免了jni代码的重复编写 [引用自评论]。

11 hidl 有定义system/libhidl/vintfdata/manifest.xml, 如下 指定hidl service的名称类型及version。

告诉系统所有的hidl service和相关信息, version 是main.sub,

如果有多个version,main不能相同,如果1.2和2.0是可以的,但1.2和1.3 是不能同时存在的。

这边是影响hwservicemanager的实现部分

    <hal>
        <name>android.system.net.netd</name>
        <transport>hwbinder</transport>
        <version>1.1</version>
        <interface>
            <name>INetd</name>
            <instance>default</instance>
        </interface>
    </hal>
 

manifest.xml 中没定义,则getService(true) 可以调用使用(类似定义的transport passthrough);直接使用getService(false) 会获取不到。

manifest.xml 定义transporthwbinder 实际上passthrough hidl service ,如tvinput,可以正常使用

manifest.xml 中定义transportpassthrough,实际上是hwbinder,则获取的仅仅是BsXXXX,没有办法进行跨进程间通信。

 12 hidl 在新版已经被deprecated ,替换成aidl了

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值