Android R(11) HIDL 服务添加

编程入门 行业动态 更新时间:2024-10-26 03:21:46

<a href=https://www.elefans.com/category/jswz/34/1771384.html style=Android R(11) HIDL 服务添加"/>

Android R(11) HIDL 服务添加

	HIDL 原本是android9.0 以上版本都具有的特性,主要用于java 层和C/C++ 层功能的连接,简言之,一句话通过hwbinder 与 HAL 进行IPC 通信。 通过hidl-gen工具可以将框架搭建好,有效地将业务层,驱动层隔离开。下面以T9630为例,分享一下touch 模块HIDL 搭建。

一. 创建hal 文件

我们创建Itouch.hal, types.hal 放到指定目录

二. HIDL 生成Android.bp, .cpp, .h 文件

首先系统必须完整编译通过了确保hidl-gen 已经生成

PKG_ROOT=vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces
PACKAGE=vendor.mediatek.vstTouch@1.0
HIDL_GEN_OUT=$PKG_ROOT/vstTouch/1.0/default
IMPL_GEN_OUT=$PKG_ROOT/vstTouch/1.0/impl

PACKAGE 为hidl 服务的名称。
PKG_ROOT 为存放hidl 服务的目录。
HIDL_GEN_OUT 服务的实现目录。
IMPL_GEN_OUT为 hidl 服务依赖的厂商实现目录。

执行指令

hidl-gen -L androidbp -rvendor.mediatek:$PKG_ROOT -randroid.hidl:system/libhidl/transport $PACKAGE

可以生成vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces/vstTouch/1.0/Android.bp 文件,如下:

执行指令

hidl-gen -o $HIDL_GEN_OUT -Lc++-impl -r vendor.mediatek:$PKG_ROOT -r android.hidl:system/libhidl/transport $PACKAGE

生成touch.cpp,touch.h

执行指令

hidl-gen -o $HIDL_GEN_OUT -L androidbp-impl -r vendor.mediatek:$PKG_ROOT -r android.hidl:system/libhidl/transport $PACKAGE

可以生成default/Android.bp

执行指令

hidl-gen -o $IMPL_GEN_OUT -L androidbp-impl -r vendor.mediatek:$PKG_ROOT -r android.hidl:system/libhidl/transport $PACKAGE

生成impl 目录及Androd.bp,如下:

手动创建service.cpp,rc 文件

三. 编辑中间文件

vstTouch/1.0/Android.bp 文件如下:

// This file is autogenerated by hidl-gen -Landroidbp.hidl_interface {name: "vendor.mediatek.vstTouch@1.0",root: "vendor.mediatek",system_ext_specific: true,srcs: ["types.hal","Itouch.hal",],interfaces: ["android.hidl.base@1.0",],gen_java: true,
}subdirs = ["default","impl",
]

说明几点:
该bp 指定输出vendor.mediatek.vstTouch@1.0
subdirs 添加需要遍历的子目录impl,default
root 必须是上hidl 服务所在的root 目录中有定义,如
vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces/android.bp中定义的hidl_package_root 中有定义

hidl_package_root {name: "vendor.mediatek",path: "vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces",
}subdirs = ["wifi/supplicant/1.0","tv","wifidisplay/1.0","graphics","vstTouch" ,
]

其中vstTouch 为我们需要的工作目录,加上之后整编就可以编到该模块

vstTouch/1.0/default/Android.bp 文件

// FIXME: your file license if you have onecc_binary {name: "vendor.mediatek.vstTouch@1.0-service",defaults: ["hidl_mstar"],proprietary: true,compile_multilib: "32",relative_install_path: "hw",srcs: ["service.cpp","touch.cpp",],init_rc: ["vendor.mediatek.vstTouch@1.0-service.rc"],shared_libs: ["libhidlbase","libutils","liblog","vendor.mediatek.vstTouch@1.0","vendor.mediatek.vstTouch@1.0-impl","libcutils",],cppflags: [],
}

输出hidl 服务的二进制文件vendor.mediatek.vstTouch@1.0-service 及rc 文件vendor.mediatek.vstTouch@1.0-service.rc
注意relative_install_path 为hw 时,文件会输出到/vendor/bin/hw/目录下,否则rc 文件中指定失败无法自启动,另外还依赖vendor.mediatek.vstTouch@1.0,vendor.mediatek.vstTouch@1.0-impl。

vstTouch/1.0/impl/Android.bp 如下:

cc_library_shared {name: "vendor.mediatek.vstTouch@1.0-impl",// relative_install_path: "hw",proprietary: true,srcs: ["VstTpVendorFromFctImpl.cpp","VstTpVendorFromHuaXinImpl.cpp","VstTpVendorFromSongLiImpl.cpp","VstTpVendorFromYiLiImpl.cpp",],shared_libs: ["libhidlbase","libutils","vendor.mediatek.vstTouch@1.0",],
}

输出vendor.mediatek.vstTouch@1.0-impl的动态库srcs 指定个厂商的代码实现逻辑,此处relative_install_path 去掉这样库默认输出到/vendor/lib 下,否则vendor.mediatek.vstTouch@1.0-service 找不到改库也会启动失败。
vendor.mediatek.vstTouch@1.0-service.rc 文件如下:

service Vst_tp /vendor/bin/hw/vendor.mediatek.vstTouch@1.0-serviceclass haluser systemgroup system

vstTouch 下面几个目录的依赖关系如下:

四. 编译

单编可以生成对应库和依赖文件

croot
mmm vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces/vstTouch/1.0/

五. 安装

主要是修改mk ,xml 文件
vendor/mediatek/common-tv/common.mk 添加

PRODUCT_PACKAGES += \vendor.mediatek.vstTouch@1.0 \vendor.mediatek.vstTouch@1.0-service \vendor.mediatek.vstTouch@1.0-impl \

device/mediatek/m7332/common/configs/manifest.xml 添加:

    <hal format="hidl"><name>vendor.mediatek.vstTouch</name><transport>hwbinder</transport><version>1.0</version><interface><name>Itouch</name><instance>default</instance></interface></hal>

另外一个vendor/mediatek/proprietary_tv/open/hardware/mtk_interfaces/current.txt添加hash code

1c0383b25e0ba623f7216243477f00636c2225afe892f1dc11dee77ee5ddf1d6 vendor.mediatek.vstTouch@1.0::types
89e611490954b2b7097d6e25ad1719266e20903a18a5a7f8aff34978d349484e vendor.mediatek.vstTouch@1.0::Itouch

通过指令

hidl-gen -L hash -r vendor.mediatek:$PKG_ROOT -randroid.hidl:system/libhidl/transport $PACKAGE >> $PKG_ROOT/current.txt

添加。

六. 权限设置

在vendor/mediatek/proprietary_tv/open/system/sepolicy 目录下
新增文件hal_vstTouch.te

binder_call(hal_vstTouch_client, hal_vstTouch_server)
binder_call(hal_vstTouch_server, hal_vstTouch_client)add_hwservice(hal_vstTouch_server, hal_vstTouch_hwservice)allow hal_vstTouch_client hal_vstTouch_hwservice:hwservice_manager find;

新增文件hal_vstTouch_default.te

type hal_vstTouch_default, domain;
hal_server_domain(hal_vstTouch_default, hal_vstTouch)type hal_vstTouch_default_exec, exec_type, vendor_file_type, file_type;
init_daemon_domain(hal_vstTouch_default)vndbinder_use(hal_vstTouch_default)set_prop(hal_vstTouch_default, mtk_core_property_type)allow hal_vstTouch_default AIPQService:binder call;
allow hal_vstTouch_default hal_allocator:fd { use };
allow hal_vstTouch_default hal_allocator_server:fd { use };
allow hal_vstTouch_default hal_allocator:binder { call };
allow hal_vstTouch_default hal_allocator_server:binder { call };
allow hal_vstTouch_default hidl_memory_hwservice:hwservice_manager { find };
allow hal_vstTouch_default mstar_system_vndservice:service_manager { add find };
allow hal_vstTouch_default self:binder { transfer call };

attributes文件添加如下内容:

attribute hal_vstTouch;
attribute hal_vstTouch_client;
attribute hal_vstTouch_server;

platform_app.te 新增内容:

hal_client_domain(platform_app, hal_vstTouch);

system_app.te新增内容:

hal_client_domain(system_app, hal_vstTouch);

file_contexts 新增内容:

/vendor/bin/hw/vendor\.mediatek\.vstTouch@1\.0-service                              u:object_r:hal_vstTouch_default_exec:s0

hwservice.te 新增内容:

type hal_vstTouch_hwservice, hwservice_manager_type;

priv_app.te 新增内容:

hal_client_domain(priv_app, hal_vstTouch);

hwservice_contexts 新增内容:

# hal vstTouch
vendor.mediatek.vstTouch::Itouch                                    u:object_r:hal_vstTouch_hwservice:s0

然后全编,升级后可以看到

七. APP 调用

Androd.mk 中添加

LOCAL_STATIC_JAVA_LIBRARIES += \vendor.mediatek.vstTouch-V1.0-java

test.java 中

import vendor.mediatek.vstTouch.V1_0.Itouch;public void test(){Itouch touch = Itouch.getService();touch.setTheLimitedRect(0,0,3840,2160);
}

归纳一下修改的文件:

.
├── device
│   └── mediatek
│       └── m7332
│           └── common
│               └── configs
│                   └── manifest.xml
└── vendor└── mediatek├── common-tv│   └── common.mk└── proprietary_tv└── open├── hardware│   └── mtk_interfaces│       ├── Android.bp│       ├── current.txt│       └── vstTouch│           └── 1.0│               ├── Android.bp│               ├── default│               │   ├── Android.bp│               │   ├── service.cpp│               │   ├── touch.cpp│               │   ├── touch.h│               │   └── vendor.mediatek.vstTouch@1.0-service.rc│               ├── impl│               │   ├── Android.bp│               │   ├── VstTpVendorBase.cpp│               │   ├── VstTpVendorBase.h│               │   ├── VstTpVendorFromFctImpl.cpp│               │   ├── VstTpVendorFromFctImpl.h│               │   ├── VstTpVendorFromHuaXinImpl.cpp│               │   ├── VstTpVendorFromHuaXinImpl.h│               │   ├── VstTpVendorFromSongLiImpl.cpp│               │   ├── VstTpVendorFromSongLiImpl.h│               │   ├── VstTpVendorFromYiLiImpl.cpp│               │   └── VstTpVendorFromYiLiImpl.h│               ├── Itouch.hal│               └── types.hal└── system└── sepolicy├── attributes├── file_contexts├── hal_vstTouch_default.te├── hal_vstTouch.te├── hwservice_contexts├── hwservice.te├── platform_app.te├── priv_app.te└── system_app.te

更多推荐

Android R(11) HIDL 服务添加

本文发布于:2024-02-25 18:31:10,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1699903.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Android   HIDL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!