目录
2.3、执行update-makefiles.sh,自动生成相关代码
5、编译出来为vendor.hardware.test@1.0-impl.so
6、工程中添加开机启动init.rc 和 manifest.xml
1、生成hidl-gen
source build/envsetup.sh
lunch sys_mssi_t_64_cn-userdebug
make hidl-gen 或者在system/tools/hidl中mmm
2、添加hidl文件,自动生成相关代码
2.1、在工程中vendor中添加目录test/1.0
2.2、添加接口hal文件
ITest.hal文件如下
package vendor.hardware.test@1.0;
import ITestCmdCallback;
interface ITest {
registCallback(ITestCmdCallback callback) generates (int32_t result);
};
ITestCmdCallback.hal文件如下
package vendor.hardware.test@1.0;
interface ITestCmdCallback {
oneway callback(string rsp);
};
update-makefiles.sh文件如下
#!/bin/bash
# Script to update Android make-files for HAL and VTS modules.
#add code patch
LOC=vendor/test/1.0/default
#current.txt path
CURRENT_FILE=vendor/test
#package name
PACKAGE=vendor.hardware.test@1.0
#package name + path
SS=vendor.hardware.test:vendor/test
TT=android.hidl:system/libhidl/transport
echo ">>>begin create bp file"
out/host/linux-x86/bin/hidl-gen -o . -Landroidbp -r$SS -r$TT $PACKAGE
echo "<<<end create bp file"
echo ">>> begin create hash file"
out/host/linux-x86/bin/hidl-gen -L hash -r$SS -r$TT $PACKAGE >> $CURRENT_FILE/current.txt
echo "<<< end create hash file"
echo ">>> begin create cpp file"
out/host/linux-x86/bin/hidl-gen -o $LOC -Lc++-impl -r$SS -r$TT $PACKAGE
echo "<<< end create cpp file"
echo ">>> begin create impl file"
out/host/linux-x86/bin/hidl-gen -o $LOC -Landroidbp-impl -r$SS -r$TT $PACKAGE
echo "<<< end create impl file"
echo ">>> begin create androidbp-service file"
#out/host/linux-x86/bin/hidl-gen -v -Landroidbp-service -r $SS -o $LOC $PACKAGE
#out/host/linux-x86/bin/hidl-gen -v -Lc++-service -r $SS -o $LOC $PACKAGE
echo ">>> end create androidbp-service file"
2.3、执行update-makefiles.sh,自动生成相关代码
3、编译
source build/envsetup.sh
lunch sys_mssi_t_64_cn-userdebug
进入vendor/test目录,执行mm 报错
在vendor/test目录中添加Android.bp
Android.bp内容如下
subdirs = [
"*"
]
hidl_package_root {
name: "vendor.hardware.test",
path: "vendor/test",
use_current: true,
}
再次执行mm,编译成功
4、代码编写
default目录中添加service.cpp
service.cpp 代码如下
#include <android/log.h>
#include <hidl/HidlSupport.h>
#include <hidl/HidlTransportSupport.h>
using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
#include "Test.h"
using vendor::hardware::test::implementation::Test;
int main() {
Test* mTest = new Test();
ALOGE("Test hidl start");
configureRpcThreadpool(10, true /*callerWillJoin*/);
if (mTest != nullptr) {
if (::android::OK != mTest->registerAsService()) {
return 1;
}
} else {
ALOGE("Can't create instance of ITest, nullptr");
}
ALOGE("Test start success!");
joinRpcThreadpool();
return 0; // should never get here
}
修改Android.bp
5、编译出来为vendor.hardware.test@1.0-impl.so
继续修改Android.bp,vendor.hardware.test@1.0-impl修改为vendor.hardware.test@1.0-service如下
push到手机上测试, xxx为工程目录
adb root
adb remount
adb push Z:\code\xxx\out_sys\target\product\mssi_t_64_cn\vendor\bin\hw\vendor.hardware.test@1.0-service /vendor/bin/hw/
adb push Z:\code\xxx\out_sys\target\product\mssi_t_64_cn\vendor\lib64\vendor.hardware.test@1.0.so /vendor/lib64/
adb reboot
手动运行
发现启动后报错
在/vendor/etc/vintf/manifest添加相关vendor.hardware.test@1.0.xml
vendor.hardware.test@1.0.xml内容如下
<manifest version="1.0" type="device">
<hal format="hidl">
<name>vendor.hardware.test</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>ITest</name>
<instance>default</instance>
</interface>
</hal>
</manifest>
继续push验证
adb push Z:\code\xxx\vendor\test\1.0\default\vendor.hardware.test@1.0.xml /vendor/etc/vintf/manifest/
hidl服务正常启动了
6、工程中添加开机启动init.rc 和 manifest.xml
vendor.hardware.test@1.0-service.rc文件内容如下
service test /vendor/bin/hw/vendor.hardware.test@1.0-service
# "class hal" causes a race condition on some devices due to files created
# in /data. As a workaround, postpone startup until later in boot once
# /data is mounted.
class late_start
user system
group system
writepid /dev/cpuset/system-background/tasks