Android9 HAL Service 开发(1)

本文详述了在Android P上开发一个简单的HAL Service的步骤,包括编写.hal文件,使用hidl-gen生成模板文件,实现HAL服务端,处理Device和VNDK部分,配置SeLinux,开发App客户端,并在模拟器上进行测试验证。
摘要由CSDN通过智能技术生成

本文将介绍如何在Android P上简单增加绑定式的HAL Service,然后编写一个App直接调用HAL的接口,并使用 aosp_car_x86_64-userdebug 模拟器进行验证。

一 编写.hal文件

.hal的语言格式是C++和Java的结合体。

以 hardware/interfaces 为根目录,在这个目录下创建 test/1.0 作为我们编写的服务的工作目录。

1.1  新建types.hal(定义结构体,复杂变量可在此定义)

//types.hal
package android.hardware.test@1.0;

struct TestEvent{
    int32_t what;
    string msg;
};

1.2  新建ITestCallback.hal (用于回调使用)

//ITestCallback.hal
package android.hardware.test@1.0;

interface ITestCallback{
    //oneway 异步操作且无返回值
    oneway onTestEvent(TestEvent event);
};

1.3 新建ITest.hal (主接口)

//ITest.hal
package android.hardware.test@1.0;
//需要导入其他的接口,types.hal中的结构体不需要手动导入
import android.hardware.test@1.0::ITestCallback; 

interface ITest{
    init();
    //generates 代表返回的数据类型
    helloworld(string name) generates (string result);

    setCallback(ITestCallback callback) generates (bool res);

    release();
};

 

二 使用 hidl-gen 生成*.h、*.cpp、Android.bp等模板文件

2.1 hidl-gen 是AOSP中编译生成的工具,因此在之前全编一次,若已经全编,那么只用source和lunch加载一下环境变量。

source build/envsetup.sh
lunch aosp_car_x86_64_userdebug
make -j12

2.2 切换至项目目录 hardware/interfaces/test/1.0 ,并创建hal服务端代码存放的目录 default

2.3 使用 hidl-gen 生成服务端的.cpp和.h文件。 具体hidl-gen 使用方法可参见 hidl-gen --help

hidl-gen -o . -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport default

2.4 使用hidl-gen 生成Android.bp文件。

hidl-gen -o . -Landroidbp-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport default

2.5 使用 update-makefile.sh 生成1.0目录下的Android.bp 文件。

//该sh文件在 /hardware/interfaces目录下
sh ../update-makefiles.sh

2.6 因为服务端不需要ITestCallback的具体实现,故删除2.3步生成的TestCallback.cpp和TestCallback.h。

 

三 实现hal 服务端

3.1 编辑Test.h文件,为了方便打印Log,我们需要在这里include Log 头文件以及定义TAG。

#ifndef ANDROID_HARDWARE_TEST_V1_0_TEST_H
#define ANDROID_HARDWARE_TEST_V1_0_TEST_H

#include <android/hardware/test/1.0/ITest.h>
#include <hidl/MQDescriptor.h>
#include <hidl/Status.h>
//增加的部分开始
#includ
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值