赞
踩
HIDL的全称是HAL interface definition language(硬件抽象层接口定义语言),在此之前Android 有AIDL,架构在Android binder 之上,用来定义Android 基于Binder通信的Client 与Service之间的接口。HIDL也是类似的作用,只不过定义的是Android Framework与Android HAL实现之间的接口。
传统HAL层
HIDL hal层
HIDL | Android 开源项目 | Android Open Source Project (google.cn)
在AOSP中,HIDL接口文件的路径如下:
实现车载音频 HAL | Android 开源项目 | Android Open Source Project (google.cn)
(for Android Q)
For Android common:
android/vendor/noch/common/interfaces
For v3.5 8155 project:
android/vendor/noch/project/v3.5/sa8155/interfaces
For v3.5 6155 project:
android/vendor/noch/project/v3.5/sa6155/interfaces
现在开始创建示例HAL:
创建如下目录结构
the working directory is /vendor/noch/common/interfaces/example/1.0
source build/envsetup.sh
lunch sa8155_v35-userdebug
update-makefiles.sh文件如下:
#!/bin/bash
# Script to update Android make-files for HAL and VTS modules.
source $ANDROID_BUILD_TOP/system/tools/hidl/update-makefiles-helper.sh
do_makefiles_update \
"vendor.gwm.common.hardware:vendor/noch/common/interfaces" \
"android.hidl:system/libhidl/transport"
cd android/vendor/noch/common/interfaces/example/1.0
../../hidl-scripts/update-makefiles.sh
Android.bp
generate-source.sh文件如下:
#! /bin/bash # v1.0 if [ -z $1 ]; then echo "Please input module name" exit 1 else MODULE=$1 fi PACKAGE=vendor.gwm.common.hardware.$MODULE@1.0 echo "You package is: $PACKAGE" LOC=default/impl #make hidl-gen -j64 hidl-gen -o $LOC -Lc++-impl -rvendor.gwm.common.hardware:vendor/noch/common/interfaces \ -randroid.hidl:system/libhidl/transport $PACKAGE hidl-gen -o $LOC -Landroidbp-impl -rvendor.gwm.common.hardware:vendor/noch/common/interfaces \ -randroid.hidl:system/libhidl/transport $PACKAGE
../../hidl-scripts/generate-source.sh example
运行generate-source.sh时后面需加上模块名,这里是example
cd android/vendor/noch/common/interfaces/example/1.0/default/impl
mkdir include src
mv *.h include
mv *.cpp src
mv Android.bp ../
cd android/vendor/noch/common/interfaces/example/1.0/default
touch ExampleService.cpp
此时的目录结构
vi vendor.noch.common.hardware.example@1.0-service.rc
cd android/vendor/noch/common/interfaces/example/1.0/default
vi Android.bp
Example.cpp
ExampleCallback.cpp
cd android/vendor/noch/common/interfaces/example/1.0/default
mm
vendor.noch.common.hardware.example@1.0-service 将会install在vendor/bin/hw中
vendor.noch.common.hardware.example@1.0-service.rc 将会install在vendor/etc/init中
恭喜你,至此,你已经成功创建了HAL服务,你也可以将其push到vendor模块中去调试它。
但是,它不会在系统启动时自动运行
因为:
vi common_manifest_overrides.xml
vi common_compatibility_matrix.xml
vi file_contexts
vi hal_example.te
这样example HAL服务就能自动运行在目标板子上了
cd android/vendor/noch/common/interfaces/example/1.0/default/tests
vi ExampleHalClient.cpp
cd android/vendor/noch/common/interfaces/example/1.0/default
vi Android.bp
mm
你可以将vendor.noch.common.hardware.example@1.0-client推到板子里的目标路径/vendor/bin/中
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。