Android S HAL库的编译

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiaowang_lj

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

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

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

打赏作者

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

抵扣说明:

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

余额充值