Android11 HAL层开发

Posted 他叫小黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android11 HAL层开发相关的知识,希望对你有一定的参考价值。

最近在搞android11,拉起hal服务的时候报错了,一直崩。

首先,Android11不能使用直通式HAL的写法了,会报以下的错误:

LegacySupport: Could not get passthrough implementation for android.hardware.fingerprint@1.0::IFingerprint/default

改成Binderized HAL的写法就可以了。


另外还遇到一个指针报错,如下:

sp      : sp<> constructed with stack pointer argument

为什么会报这个错误呢??是因为Android11增加了一个针对sp的检查,具体看谷歌的一个patch:
Add check to sp<> raw pointer constructor

不能按照 Android8.1HAL层开发 这样写service.cpp文件了,要改成指针的写法,如下:

//service.cpp
#define LOG_TAG "android.hardware.fingerprint@1.0-service"

#include <android-base/logging.h>
#include <hidl/HidlTransportSupport.h>
#include <android/hardware/fingerprint/1.0/IFingerprint.h>
#include <hidl/LegacySupport.h>

#include "Fingerprint.h"

using android::hardware::configureRpcThreadpool;
using android::hardware::joinRpcThreadpool;
using android::hardware::fingerprint::V1_0::implementation::Fingerprint;

int main() 

    configureRpcThreadpool(4, true);

    //Fingerprint fingerprint;
    //auto status = fingerprint.registerAsService();
    // 不能像上面的注释这样写了,要按照如下写法,使用指针
    auto service = std::make_unique<Fingerprint>();
    auto status = service->registerAsService();
    
    CHECK_EQ(status, android::OK) << "Failed to register fingerprint HAL implementation";

    joinRpcThreadpool();
    return 0;  // joinRpcThreadpool shouldn't exit


以上。

以上是关于Android11 HAL层开发的主要内容,如果未能解决你的问题,请参考以下文章

Android11 HAL层开发

Android11 HAL层开发

Android8.1HAL层开发

Android8.1HAL层开发

Android深度探索(卷1)HAL与驱动开发 第九章 硬件抽象层:HAL 读书笔记

Android HAL