Android P HAL层添加HIDL实例

从 Android 10 开始,HIDL 已废弃,Android 将在所有位置改用 AIDL。

一、准备工作

  1. 整套源码,Android S的
  2. 保证全套代码已经全编译,原生代码全编译命令
  • source build/envset.sh
  • lunch
  • make

   3、hidl-gen工具已经安装,安装命令

  • make hidl-gen 

二、项目实例

1、在hardware/interfaces/目录下新建 test/1.0目录,并在1.0目录中创建接口ITest.hal。目录结构如下

ITest.hal文件里面只有一个接口ITest和一个方法helloWorld(string name),具体实现如下: 

package android.hardware.test@1.0;
 
interface ITest{
	helloWorld(string name) generates (string result);
};

2、在源码根路径执行下面三条命令会自动生成对应的c++文件;

PACKAGE=android.hardware.test@1.0
LOC=hardware/interfaces/test/1.0/default/
hidl-gen -o $LOC -Lc++-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE

对应的 目录结构如下

default 是新生成的目录,Test.cpp和Test.h是新生成的两个文件,打开Test.h文件,去掉// extern "C" IGunder* HIDL_FETCH_ITest(const char* name);前面的注释,使用直通式HAL(Passthrough 模式)来通信

Test.cpp文件也要进行对应的修改,修改后如图所示

3、执行下面命令

hidl-gen -o $LOC -Landroidbp-impl -randroid.hardware:hardware/interfaces -randroid.hidl:system/libhidl/transport $PACKAGE
会在hardware/interfaces/test/1.0/default目录生成Android.bp文件。
4、然后使用脚本update-makefiles.sh来更新Makefile,自动在hardware/interfaces/test/1.0目录生成 Android.bp。命令如下

./hardware/interfaces/update-makefiles.sh

5.在hardware/interfaces/test/1.0/default目录下新建service.cpp跟android.hardware.test@1.0-service.rc,其中android.hardware.test@1.0-service.rc是程序的入口函数

service test_hal_service /vendor/bin/hw/android.hardware.test@1.0-service
    class hal
    user system
    group system

6.新建service.cpp 这里使用绑定式 直通式为注释部分

#define LOG_TAG "android.hardware.test@1.0-service"
#include <android-base/logging.h>
#include <hidl/HidlTransportSupport.h>
#include <android/hardware/test/1.0/ITest.h>

#include <hidl/LegacySupport.h>
#include "Test.h"
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::test::V1_0::implementation::Test;
//using android::hardware::defaultPassthroughServiceImplementation;
//passthrough mode

int main() {
	configureRpcThreadpool(4, true);

    Test test;
    auto status = test.registerAsService();
    CHECK_EQ(status, android::OK) << "Failed to register test HAL implementation";

    joinRpcThreadpool();
    return 0;  // joinRpcThreadpool shouldn't exit
 //   return defaultPassthroughServiceImplementation<ITest>();
 //passthrough mode
}

7.修改default下的Android.bp,添加 service的编译规则

cc_binary {
    name: "android.hardware.test@1.0-service",
    relative_install_path: "hw",
    defaults: ["hidl_defaults"],
    proprietary: true,
    init_rc: ["android.hardware.test@1.0-service.rc"],
    srcs: [
		   "Test.cpp",
	       "service.cpp",
	      ],
    shared_libs: [
		"libbase",      
        "liblog",
        "libdl",
        "libutils",
        "libhardware",
        "libhidlbase",
        "libhidltransport",
        "android.hardware.test@1.0",
    ],
}

调用 update-makefiles.sh更新一下然后单编测试一下

mmm ./hardware/interfaces/test/1.0

Android 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Android TIF (TV Input Framework) HALAndroid系统中专门用于电视输入设备的HAL,它提供了与电视输入设备交互的接口。本文将从以下几个方面对Android TIF HAL进行分析: 1. TIF HAL的结构 TIF HAL的结构主要包括以下几个部分: - TIF HAL接口:包含了TIF HAL与上应用交互的接口,包括初始化、搜索电视节目、设置电视节目等接口。 - TIF HAL实现:包含了TIF HAL的具体实现,与具体的电视输入设备相关。 - TIF HAL框架:包含了TIF HAL的框架代码,用于管理TIF HAL的实现。 2. TIF HAL的初始化 TIF HAL的初始化主要包括以下几个步骤: - 加载TIF HAL库:系统在启动时会自动加载TIF HAL库。 - 查找TIF HAL接口:系统通过dlsym函数查找TIF HAL接口。 - 初始化TIF HAL实现:系统调用TIF HAL接口中的初始化函数初始化TIF HAL实现。 3. TIF HAL与电视输入设备的交互 TIF HAL与电视输入设备的交互主要包括以下几个步骤: - 搜索电视节目:应用调用TIF HAL接口中的搜索电视节目函数,TIF HAL实现会向电视输入设备发送搜索电视节目的指令,并接收电视输入设备返回的电视节目信息。 - 设置电视节目:应用调用TIF HAL接口中的设置电视节目函数,TIF HAL实现会向电视输入设备发送设置电视节目的指令,并等待电视输入设备返回设置结果。 4. TIF HAL的实现 TIF HAL的具体实现与电视输入设备相关,不同的电视输入设备需要实现不同的TIF HAL。TIF HAL的实现需要遵循Android HAL的规范,包括实现HAL接口、定义HAL结构体等。 总的来说,Android TIF HAL是一个用于电视输入设备的HAL,它提供了与电视输入设备交互的接口,其具体实现与电视输入设备相关。在使用Android TIF HAL时,需要遵循Android HAL的规范,并根据实际的电视输入设备进行相应的实现。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xiaowang_lj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值