Android R中引入了一个名为VINTF(Vendor Interface)的新系统,其目的是提高设备间的兼容性和向后兼容性。在这个新系统中,要求所有的HAL都必须被静态地定义在一个名为/vnd目录下的标记文件中。
因此,解决Android Hal没有在运行时注册的问题,需要在对应的/vnd目录下添加静态定义的标记文件,并在平台中注册HAL,例如:
include $(CLEAR_VARS) LOCAL_MODULE := my_hal LOCAL_MODULE_TAGS := optional LOCAL_MODULE_CLASS := SHARED_LIBRARY LOCAL_SRC_FILES := my_hal.so LOCAL_C_INCLUDES := $(LOCAL_PATH)/include include $(BUILD_SHARED_LIBRARY)
#include
using android::hidl::base::V1_0::IBase; using android::hidl::manager::V1_0::IServiceManager;
namespace android {
struct MyHal : public IMyHalInterface { // Implement IMyHalInterface methods here. };
static void RegisterHal() {
sp
} // namespace android
extern "C" void my_hal_init() { android::RegisterHal(); }
在调用 libmy_hal.so 的入口点 my_hal_init() 中,调用 registerPassthroughServiceImplementations() 可以注册你的 HAL。例如:
#include
int main() { using ::android::hardware::configureRpcThreadpool; using ::android::hardware::