Android S HAL库的编译

简介: 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


目录
相关文章
|
4天前
|
Linux 编译器 开发工具
Android内核的编译过程
Android内核的编译过程
14 0
|
2天前
|
监控 安全 API
orhanobut/logger - 强大的Android日志打印库
orhanobut/logger - 强大的Android日志打印库
8 1
|
2天前
|
Android开发
jack-server导致 Android 编译 出现异常
jack-server导致 Android 编译 出现异常
14 6
|
4天前
|
移动开发 jenkins 持续交付
jenkins编译H5做的android端编译卫士app记录
jenkins编译H5做的android端编译卫士app记录
|
4天前
|
Android开发
在android源码中编译ADW_Launcher
在android源码中编译ADW_Launcher
12 2
|
4天前
|
Ubuntu Android开发
Android Froyo基于32 bit ubuntu 10.10编译问题
Android Froyo基于32 bit ubuntu 10.10编译问题
|
4天前
|
Shell 开发工具 Android开发
android 修改kernel编译版本信息
android 修改kernel编译版本信息
21 0
|
4天前
|
编解码 调度 Android开发
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
Android音频框架之一 详解audioPolicy流程及HAL驱动加载与配置
19 0
|
4天前
|
Ubuntu Linux Shell
Android-NDK-clang 编译 FFmpeg
Android-NDK-clang 编译 FFmpeg
18 0
|
4天前
|
编译器 Android开发
Android S内置APK时AndroidManifest使用uses-library编译报错
Android S内置APK时AndroidManifest使用uses-library编译报错
13 0