大家好,欢迎来到IT知识分享网。
目录
1. HIDL 概念
1.1. Hidl 的简单介绍
1.2. Hidl 的设计目的
1.3. Hidl 与 Aidl 的对比
2 . HIDL 类型
2.1 Passthrough
2.2 Binderized
3. HIDL 服务的实现
3.1 hidl_gen 工具路径
代码目录:system/tools/hidl
3.2 update-makefiles.sh
3.3 update-files.sh
执行完之后自动生成了 default 目录
创建后的 Android.bp 如下:
可以根据特殊的需要进行修改,例如,vendor 需要设为 true,这样编译出来的 so 位于 vendor 下面,而不是 system。也可以使用同样的方式为 FQName-service 创建对应的规则。
3.4 HIDL 生成的文件
3.5 service 和 impl 关系
service.端的 service.cpp 需要手动去编写,可以拷贝系统已存在的过来进行修改,比较简单
3.6 添加 rc 文件
3.7 启动 service
在 xml 中配置完成之后就直接 start;另外需要设置 selinux 中添加 te 文件,设置 domain 信息。对于selinux 配置,这里暂不分析
3.8 实现 client 端
客户端的文件直接使用 java 文件引用编译生成的 java 静态库 android.hardware.helloworld-V1.0-java然后 IHelloWorld.getService(true); 来获取 HIDL 服务。这样就直接跳过 java – jni —c++
接着可以直接在 HelloWorld.cpp 中引用 hal 层编译生成的 so 文件来操作硬件外设。
4 . 新旧软件架构对比
4.1 Android 8.0 之前架构图
这里的难度是在 binder 通讯那块,如果使用的是 Android 原生的就 不需要重新写。但是想要开发自己的中间件,就必须实现要去实现自己的 binder 驱动通讯。
4.2 binder 驱动通讯的实现
采用旧架构进行中间件的设计和开发架构图如下,这里忽略 app 到中间件的的调用流程,这个流程和HIDL 的一样。流程直接从 native 开始往下走。
从上面的架构流程图可以看出,使用老技术开发操作硬件外设是非常的复杂和繁琐。涉及到的文件和知识点众多,无论是前期开发或者是后期的维护难度是非常大。因此,在 Android 8.0 之后的版本,采用了 HIDL进行软件架构重构,弃用之前的方法。HIDL 加快了相应速度,提高访问效率,而且代码简洁,接口逻辑清晰,开发和维护起来方便。
4.3 使用 HIDL 设计软件架构
有了前面 3 章节介绍 Hidl 的知识点之后,我们就可以设计出基于 HIDL 的软件架构。
通过新软件架构图和传统的软件架构图可以知道 HIDL 那层代替了原来的
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/113176.html

















