1.准备源码
Android S 源码,基于amlogic平台
2.编写hal接口
在vendor\xxx\DVB\interfaces\下创建 自己的文件夹 例如calculate/1.0
编写hal文件
package vendor.xxx.calculate@1.0;
interface ICalculate{
//加法
add(uint32_t a,uint32_t b) generates (uint32_t result);
//减法
sub(uint32_t a,uint32_t b) generates (uint32_t result);
//乘法
mul(uint32_t a,uint32_t b) generates (uint32_t result);
//除法
div(uint32_t a,uint32_t b) generates (uint32_t result);
};
3.生成Android.bp文件
执行命令 :
PACKAGE=vendor.xxx.calculate@1.0
LOC=vendor/xxx/xxx/interfaces/calculate/1.0/
hidl-gen -o $LOC -Landroidbp-impl -rvendor.xxx:vendor/xxx/DVB/interfaces/ -randroid.hidl:system/libhidl/transport $PACKAGE
在calculate/1.0下生成Android.bp文件
在calculate/下创建Android.bp文件和Android.mk
// This is an autogenerated file, do not edit.
subdirs = [
"1.0",
]
include $(call all-subdir-makefiles)
4.编译so库
使用命令 mmm 对应的文件路径 就可以编译出 对应的文件了
5.使用命令生成c++文件和h文件
hidl-gen -o $LOC -Lc++-impl -rvendor.xxx:vendor/xxx/DVB/interfaces/ -randroid.hidl:system/libhidl/transport $PACKAGE
然后再创建这些编译文件 和rc文件即可
Android.bp
cc_binary {
compile_multilib: "32",
relative_install_path: "hw",
defaults: ["hidl_defaults"],
name: "vendor.xxx.calculate@1.0-service",
//vintf_fragments: ["vendor.xxx.calculate@1.0.xml"],
init_rc: ["vendor.xxx.calculate@1.0-service.rc"],
vendor: true,
srcs: [
"service.cpp"
],
shared_libs: [
"liblog",
"libbinder",
"libutils",
"libhardware",
"libhidlbase",
"vendor.xxx.calculate@1.0",
],
}
Android.mk
LOCAL_PATH :=$(call my-dir)
include $(CLEAR_VARS)
LOCAL_MULTILIB := 32
LOCAL_MODULE_RELATIVE_PATH := hw
LOCAL_C_INCLUDES:= \
vendor/xxx/DVB/sksdk/source/skportting \
frameworks/native/libs/binder/include \
LOCAL_SRC_FILES:= stbmedia.cpp
LOCAL_SHARED_LIBRARIES:= \
libhidlbase \
libhidltransport \
libcutils \
libhardware \
liblog \
libutils \
vendor.xxx.calculate@1.0 \
libbinder \
libsk_portting
LOCAL_CFLAGS +=-Wno-error=unused-parameter
LOCAL_MODULE:=vendor.xxx.calculate@1.0-impl
ifeq ($(SK_DVB_VENDOR_MODE),true)
LOCAL_VENDOR_MODULE := true
endif
include $(BUILD_SHARED_LIBRARY)
vendor.xxx.calculate@1.0-service.rc
on early-init
chmod 666 /sys/class/gpio/export
chmod 666 /sys/class/gpio/unexport
service calculate/vendor/bin/hw/vendor.xxx.calculate@1.0-service
class hal
user root
group root media system shell media_rw sdcard_rw audio camera drmrpc mediadrm everybody
ioprio rt 4
writepid /dev/cpuset/foreground/tasks
<manifest version="1.0" type="device" target-level="5">
<hal format="hidl">
<name>vendor.xxx.calculate</name>
<transport>hwbinder</transport>
<version>1.0</version>
<interface>
<name>ICalculate</name>
<instance>default</instance>
</interface>
</hal>
</manifest>
service.cpp
#include <hidl/LegacySupport.h>
#include <vendor/xxx/calculate/1.0/ICalculate.h>
#include <android/log.h>
#include <binder/ProcessState.h>
//#include "stbService.h"
using vendor::xxx::calculate::V1_0::ICalculate;
using android::hardware::defaultPassthroughServiceImplementation;
int main() {
android::ProcessState::initWithDriver("/dev/binder");
android::ProcessState::self()->setThreadPoolMaxThreadCount(4);
android::ProcessState::self()->startThreadPool();
return defaultPassthroughServiceImplementation<ICalculate>(4);
}
执行mmm 即可编译成功
out\target\product\HY40AX2\vendor\lib\hw下是c++文件生成的so vendor.xxx.calculate@1.0-impl.so
out\target\product\HY40AX2\vendor\bin\hw下是生成的service文件 vendor.xxx.calculate@1.0-service
out\target\product\HY40AX2\product\lib 下是 hal文件生成的 vendor.xxx.calculate@1.0.so