Below <company> <module> <mylib> replace with your own names.
(1) edit <TOP>/Android.bp, add custom path:
...........
optional_subdirs = [
...................
"vendor/<company>/<module>/*/*",
]
(2) create dir : vendor/<company>/<module>/
mkdir vendor/<company>/<module>/interfaces/<mylib>/1.0/default
(3) create IMyService.hal and types.hal under dir vendor/<company>/<module>/interfaces/<mylib>/1.0
//IMyService.hal
package vendor.<company>.<mylib>@1.0;
interface IMyService{
getVal1() generates (MyResult result);
doJob(vec<uint8_t> arr1, int32_t i2, string s3) generates (MyResult result);
};
// type.hal
package vendor.<company>.<mylib>@1.0;
struct MyResult {
int32_t i1;
string s2;
vec<uint8_t> arr3;
};
(4) call hidl-gen to generate files:
hidl-gen -o vendor/company/module/interfaces/mylib/1.0/default -Lc++-impl -rvendor.company:vendor/company/module/interfaces/ -randroid.hidl:system/libhidl/transport vendor.company.mylib@1.0
hidl-gen -o vendor/company/module/interfaces/mylib/1.0/default -Landroidbp-impl -rvendor.company:vendor/company/module/interfaces/ -randroid.hidl:system/libhidl/transport vendor.company.mylib@1.0
hidl-gen -Landroidbp -rvendor.company:vendor/company/module/interfaces/ -randroid.hidl:system/libhidl/transport vendor.company.mylib@1.0
vendor/company/module/interfaces/lib/1.0/default/MyService.cpp and MyService. h are autogened.
vendor/company/module/interfaces/lib/1.0/Android.bp is autogened.
(5) create android.bp
vendor/company/module/interfaces/lib/Android.bp
// This is an autogenerated file, do not edit.
subdirs = [
"1.0",
"1.0/default",
]
(6) create service.cpp
vendor/company/module/interfaces/lib/1.0/default/service.cpp
#include <hidl/HidlTransportSupport.h>
#include <hidl/LegacySupport.h>
#include "MyService.h"
#define UNUSED(x) (void)(x) //宏定义,主要为了防止未使用的变量出现编译报错
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using vendor::company::lib::V1_0::implementation::MyService;
int main(){
MyService ms;
configureRpcThreadpool(1, true /* callerWillJoin */);
android::status_t status = ms.registerAsService(); //注册服务
if (status != android::OK) {
ALOGD("registerAsService myservice failed!");
return -1;
}
ALOGD("registerAsService myservice success!");
joinRpcThreadpool();
return 0;
}
(7) create vendor.company.lib@1.0-service.rc
service my_hal_service /vendor/bin/hw/vendor.compnay.mylib@1.0-service
class hal
user system
group system
(8) create vendor/company/module/interfaces/mylib/1.0/default/Android.bp
cc_binary {
relative_install_path: "hw",
defaults: ["hidl_defaults"],
vendor: true,
proprietary: true,
name: "vendor.company.mylib@1.0-service",
init_rc: ["vendor.company.mylib@1.0-service.rc"],
srcs:
["MyService.cpp",
"service.cpp"],
shared_libs: [
"liblog",
"libcutils",
"libdl",
"libbase",
"libutils",
"libhardware",
] + [
"libhidlbase",
"libhidltransport",
"vendor.company.mylib@1.0",
],
}
(9) compile module
mmm vendor/company/module/interfaces/mylib/
本文详细介绍了如何在 Android 8.1 中编写和配置 HIDL(硬件接口描述语言)。从编辑 Android.bp 文件开始,创建指定目录结构,编写 IMyService.hal 和 types.hal,使用 hidl-gen 工具自动生成源代码,到创建 Android.bp、service.cpp 文件,以及设置服务资源文件,最后编译模块,整个过程清晰地展示了实现 HIDL 的关键步骤。

1万+

被折叠的 条评论
为什么被折叠?



