1. 工具

 创建工具脚本:hello_word1_0-hidl-gen.sh

#!/bin/bash
PACKAGE=android.hardware.hello_word@1.0
LOC=hardware/interfaces/hello_word/1.0/default/
#SS=android.hardware:hardware/interfaces
#TT=android.hidl:system/libhidl/transport#hidl-gen -o . -Landroidbp -r$SS -r$TT $PACKAGE
#hidl-gen -L hash -r$SS -r$TT $PACKAGE
#hidl-gen -o $LOC -Lc++-impl -r$SS -r$TT $PACKAGE
#hidl-gen -o $LOC -Landroidbp-impl -r$SS -r$TT $PACKAGE
out/soong/host/linux-x86/bin/hidl-gen -o . -Landroidbp -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE
out/soong/host/linux-x86/bin/hidl-gen -L hash -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE
out/soong/host/linux-x86/bin/hidl-gen -o $LOC -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE
out/soong/host/linux-x86/bin/hidl-gen -o $LOC -Landroidbp-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE

2. 创建.hal文件

#mkdir -p hardware/interfaces/hello_word/1.0

#cd hardware/interfaces/hello_word/1.0

#touch IHelloWordHidl.hal

#touch IHelloWordCallback.hal

2.1 修改文件

IHelloWordHidl.hal

package android.hardware.hello_word@1.0;import @1.0::IHelloWordCallback;
import @1.0::types;/*** hello_word HAL, first modern version** Supports the netlink API* API at LIMITED or better hardware level.**/interface IHelloWordHidl {HelloWordSetCallback(IHelloWordCallback callback);HelloWordHidlInit() generates(uint32_t status);HelloWordHidlDeInit() generates(uint32_t status);HelloWordHidlStart() generates(uint32_t status);HelloWordHidlStop() generates(uint32_t status);oneway HelloWordHidlSend(hellword_packet_msg msg);//
};

HelloWordCallback.hal:

package android.hardware.hello_word@1.0;import @1.0::types;/*** hello_word HAL, first modern version** Supports the netlink API* API at LIMITED or better hardware level.**/interface IHelloWordCallback {oneway notify(helloword_packet_msg msg);//for msg notify.};

 types.hal

package android.hardware.hello_word@1.0;struct helloword_packet_msg
{uint32_t length;string msg;//msg;//memory data;
};

2.2 运行脚本

#./hello_word1_0-hidl-gen.sh

2.3  修改default/*.c文件

2.4  修改default/Android.bp文件

// FIXME: your file license if you have one
cc_binary {name: "android.hardware.hello_word@1.0-service",init_rc: ["android.hardware.hello_word@1.0-service.rc"],vintf_fragments: ["android.hardware.hello_word@1.0-service.xml"],relative_install_path: "hw",vendor: true,srcs: ["HelloWordHidl.cpp","service.cpp",],shared_libs: ["liblog","libdl","libutils","libcutils","libhardware","libhidlbase","libhidlmemory","libhidltransport","android.hidl.allocator@1.0","android.hidl.memory@1.0","android.hardware.hello_word@1.0",],
}

2.5  增加服务相关文件

        service.cpp

        android.hardware.hello_word@1.0-service.rc

        android.hardware.hello_word@1.0-service.xml

  service.cpp:

#define LOG_TAG "android.hardware.hello_word@1.0-service"#include <android/hardware/hello_word/1.0/IHelloWordHidl.h>
#include <hidl/LegacySupport.h>
#include <hidl/HidlTransportSupport.h>
#include "HelloWordHidl.h"using android::hardware::hello_word::V1_0::IHelloWordHidl;
using android::hardware::hello_word::V1_0::implementation::IHelloWordHidl;
//using android::hardware::defaultPassthroughServiceImplementation;
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::sp;
using android::status_t;
using android::OK;int main() {configureRpcThreadpool(3, true);//max thread number for request.sp<IHelloWordHidl> hello_word = new HelloWordHidl;status_t status = kevent_comm->registerAsService();ALOGW_IF(status != OK, "Could not register HelloWordHidl v1.0");ALOGD("Default service is ready.");joinRpcThreadpool();return 1;}

android.hardware.hello_word@1.0-service.rc:

service hello_word_1_0 /vendor/bin/hw/android.hardware.hello_word@1.0-serviceclass haluser systemgroup system

android.hardware.kevent_comm@1.0-service:

<manifest version="1.0" type="device"><hal format="hidl"><name>android.hardware.hello_word</name><transport>hwbinder</transport><version>1.0</version><interface><name>IHelloWordHidl</name><instance>default</instance></interface></hal>
</manifest>

3. 配置

3.1 device/<board>/目录下

manifest.xml://增加如下

<hal format="hidl"><name>android.hardware.hello_word</name><transport>hwbinder</transport><version>1.0</version><interface><name>IHelloWordHidl</name><instance>default</instance></interface>
</hal>

<board>.mk 文件增加:

PRODUCT_PACKAGES += android.hardware.hello_word@1.0 \android.hardware.hello_word@1.0-service

3.2  build/make/target/product 目录下vndk api接口

修改current.txt //增加内容

VNDK-core: android.hardware.hello_word@1.0.so

修改<api_level>.txt //增加内容

VNDK-core: android.hardware.hello_word@1.0.so

编译报错:

ory
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] files are incompatible: The following instances are in the device manifest but not specified in framework compatibility matrix:
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554]     android.hardware.hello_word@1.0::IHelloWordHidl/default
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] Suggested fix:
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] 1. Update deprecated HALs to the latest version.
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] 2. Check for any typos in device manifest or framework compatibility matrices with FCM version >= 5.
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] 3. For new platform HALs, add them to any framework compatibility matrix with FCM version >= 5 where applicable.
checkvintf E 01-31 15:33:30 3609151 3609151 check_vintf.cpp:554] 4. For device-specific HALs, add to DEVICE_FRAMEWORK_COMPATIBILITY_MATRIX_FILE or DEVICE_PRODUCT_COMPATIBILITY_MATRIX_FILE.: Success
INCOMPATIBLE

修改:

hardware/interfaces/compatibility_matrices/compatibility_matrix.5.xml

增加如下内容:

<hal format="hidl" optional="true"><name>android.hardware.hello_word</name><version>1.0</version><interface><name>IHelloWordHidl</name><instance>default</instance></interface>
</hal>

如何创建一个Hidl Service?相关推荐

  1. C#创建一个Windows Service

    Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...

  2. 创建一个Windows Service应用程序

    创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...

  3. 如何在Kubernetes里创建一个Nginx service

    Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...

  4. 如何在Kubernetes里创建一个Nginx service 1

    Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...

  5. Step by Step 创建一个 Web Service

    原创地址:http://www.cnblogs.com/jfzhu/p/4022139.html 转载请注明出处 (一)创建Web Service 创建第一个项目,类型选择ASP.NET Empty ...

  6. Step by Step 创建一个WCF Service

    (一)创建WCF Service (1)创建WCF Service类库 创建一个Class Library的项目: 删除掉默认的Class1.cs文件,然后添加一个WCF Service项目: Vis ...

  7. 如何用VB.Net创建一个三层的数据库应用程序

    1. 概论:      本文将介绍如何创建一个三层应用程序,并且将介绍如何创建一个Web Service服务.       ADO.NET创建Windows三层结构应用程序的体系架构如下图所示:    ...

  8. Docker系列器十二:docker swarm三节点创建一个wordpress

    1,现在manager创建一个网络: docker network create -d overlay demo 创建完成后,在node上没有显示. [root@docker-host ~]# doc ...

  9. 使用sync adapte(二)创建一个Authenticator

    Sync adapter框架假设我们sync adapter传输数据在关联一个账户的设备内存和需要登录权限的服务器内存直接.由于这个原因,框架期望我们提供一个组件叫做认真器作为我们sync adapt ...

最新文章

  1. 混合云环境中扩展Kubernetes的挑战及方案
  2. linux:ubantu中pycharm专业版安装
  3. PHP将json或对象转成数组
  4. C - Swaps 2(树状数组,思维)
  5. php插入一个自增字段,thinkphp-自增或自减一个字段的值
  6. linux怎么在ETC文件夹内新建,教你如何手动新建Linux用户
  7. 微软补丁星期二修复120个漏洞,含2个已遭利用的 0day
  8. Android: 一个两点触控的案例
  9. [摘文]BizTalk概述
  10. Raki的读paper小记:How to Fine-Tune BERT for Text Classification?
  11. VC6++配置汇编环境和第一个简单程序
  12. Linux|超好用!绘制流程图神器——PlantUML
  13. 剑指offer刷题总结
  14. 纯CSS实现数据上报和HTML验证
  15. (转)gzip文件格式详解
  16. java中BOM是什么_Java处理带BOM的文本情况是什么?
  17. DeFCN debug记录(训练过程),以及对cvpods框架的分析
  18. Linux Shell 基础语法 流程控制 逻辑运算 字符串操作详细解析
  19. PAT A1122 Hamiltonian Cycle ——春至花如锦,夏近叶成帷
  20. 『无欲则无求』Linux系统管理 — 81、Linux进程的查看(ps命令)

热门文章

  1. 阿里mPaas中扫一扫功能的接入
  2. 网络世界强权崛起,全球竞相取经
  3. python技巧:如何使用Python对音频进行特征提取?
  4. 正则表达式 re.compile() 相关
  5. 10个建模师,9个吃不饱,游戏建模师职业现状
  6. Base16和Base64不同的用途
  7. Windows下安装PyQt(python3.8+PyQt5)
  8. 了解 Fetch API
  9. 基于STM32视频监控系统
  10. 我对计算机网络技术的理解,对计算机网络技术课程学习几点思考.doc