如何创建一个Hidl Service?
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?相关推荐
- C#创建一个Windows Service
Windows Service这一块并不复杂,但是注意事项太多了,网上资料也很凌乱,偶尔自己写也会丢三落四的.所以本文也就产生了,本文不会写复杂的东西,完全以基础应用的需求来写,所以不会对Window ...
- 创建一个Windows Service应用程序
创建一个Windows Service应用程序 下载本文代码 见资源 正是由于.NET Framework的出现,才使你能够构建出在系统重新启动时自动运行的.无人参与的(unattended)应用程序 ...
- 如何在Kubernetes里创建一个Nginx service
Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...
- 如何在Kubernetes里创建一个Nginx service 1
Jerry之前的文章如何在Kubernetes里创建一个Nginx应用,已经使用kubectl命令行创建了Pod,但是在kubernetes中,Pod的IP地址会随着Pod的重启而变化,因此用Pod的 ...
- Step by Step 创建一个 Web Service
原创地址:http://www.cnblogs.com/jfzhu/p/4022139.html 转载请注明出处 (一)创建Web Service 创建第一个项目,类型选择ASP.NET Empty ...
- Step by Step 创建一个WCF Service
(一)创建WCF Service (1)创建WCF Service类库 创建一个Class Library的项目: 删除掉默认的Class1.cs文件,然后添加一个WCF Service项目: Vis ...
- 如何用VB.Net创建一个三层的数据库应用程序
1. 概论: 本文将介绍如何创建一个三层应用程序,并且将介绍如何创建一个Web Service服务. ADO.NET创建Windows三层结构应用程序的体系架构如下图所示: ...
- Docker系列器十二:docker swarm三节点创建一个wordpress
1,现在manager创建一个网络: docker network create -d overlay demo 创建完成后,在node上没有显示. [root@docker-host ~]# doc ...
- 使用sync adapte(二)创建一个Authenticator
Sync adapter框架假设我们sync adapter传输数据在关联一个账户的设备内存和需要登录权限的服务器内存直接.由于这个原因,框架期望我们提供一个组件叫做认真器作为我们sync adapt ...
最新文章
- 混合云环境中扩展Kubernetes的挑战及方案
- linux:ubantu中pycharm专业版安装
- PHP将json或对象转成数组
- C - Swaps 2(树状数组,思维)
- php插入一个自增字段,thinkphp-自增或自减一个字段的值
- linux怎么在ETC文件夹内新建,教你如何手动新建Linux用户
- 微软补丁星期二修复120个漏洞,含2个已遭利用的 0day
- Android: 一个两点触控的案例
- [摘文]BizTalk概述
- Raki的读paper小记:How to Fine-Tune BERT for Text Classification?
- VC6++配置汇编环境和第一个简单程序
- Linux|超好用!绘制流程图神器——PlantUML
- 剑指offer刷题总结
- 纯CSS实现数据上报和HTML验证
- (转)gzip文件格式详解
- java中BOM是什么_Java处理带BOM的文本情况是什么?
- DeFCN debug记录(训练过程),以及对cvpods框架的分析
- Linux Shell 基础语法 流程控制 逻辑运算 字符串操作详细解析
- PAT A1122 Hamiltonian Cycle ——春至花如锦,夏近叶成帷
- 『无欲则无求』Linux系统管理 — 81、Linux进程的查看(ps命令)