AndroidT(13)--支持MultiHal 的 SensorHal启动--HIDL(四)

本文详细介绍了Android Sensor Multi-HAL框架的工作原理,包括动态加载子HAL库、服务注册、启动流程以及子HAL的初始化。Multi-HAL允许传感器HAL与其他HAL共存,通过动态库加载子HAL并提供回调对象处理事件。文中还展示了Sensor HAL的编译过程,启动服务的rc文件定义,以及如何实例化和使用HIDL接口。

1.概览

  The Sensors Multi-HAL is a framework that allows sensors HALs to run alongside other sensor HALs. The Sensors Multi-HAL dynamically loads sensors sub-HALs stored as dynamic libraries on the vendor partition and gives them a callback object that can handle posting events and acquiring and releasing the wake lock. A sensors sub-HAL is a sensors HAL that is built into a shared object on the vendor partition and is used by the multi-HAL framework. These sub-HALs don’t depend on one another or on the multi-HAL code that contains the main function for the process.
  关于MutiHal更详细的说明可以参考Android的官方文档,其中包括和普通sensorhal的不同点以及如何适配multiHal等主要的说明。官方文档 sensors-multihal
  另外本章不涉及HIDL接口的编写及使用说明,读者只要将其理解为和c++/java中的接口对等即可,只不过HIDL支持跨进程的方式调用。

2.SensorHal的编译

  SensorHal是以独立的进程进行的,下面看看AndroidT中是如何对其进行编译的。

//hardware/interfaces/sensors/2.0/multihal/Android.bp
cc_binary {
   
   
    name: "android.hardware.sensors@2.0-service.multihal",
    ...
    vendor: true,
    relative_install_path: "hw",
    srcs: [
        "service.cpp",
    ],
    init_rc: ["android.hardware.sensors@2.0-service-multihal.rc"],
    ...
    header_libs: [
        "android.hardware.sensors@2.X-shared-utils",
    ],
    shared_libs: [
        "android.hardware.sensors@2.0",
        "android.hardware.sensors@2.1",
        ...
    ],
}

  根据字段name、vendor以及relative_install_path可知,最终编译出的可执行程序名为 android.hardware.sensors@2.0-service.multihal 且位于/vendor/bin/hw下。
  init_rc中的文件描述在init阶段,SensorHal的启动特性,例如进程的名字、所在组、优先级等。

//hardware/interfaces/sensors/2.0/multihal/android.hardware.sensors@2.0-service-multihal.rc
service vendor.sensors-hal-2-0-multihal /vendor/bin/hw/android.hardware.sensors@2.0-service.multihal
    class hal
    user system
    group system wakelock context_hub
    task_profiles ServiceCapacityLow
    capabilities BLOCK_SUSPEND
    rlimit rtprio 10 10

  srcs字段描述可执行程序的源码组成。至于其它字段可以参考文档

out/soong/docs/cc.html

3.SensorHal的启动

  SensorHal的进程由init根据其给定的rc文件来启动,下面是部分定义

service vendor.sensors-hal-2-0-multihal /vendor/bin/hw/android.hardware.sensors@2.0-service.multihal

  不难看出是以service的形式来启动它的,即没有指定oneshot的情况下,在 vendor.sensors-hal-2-0-multihal 退出后,init进程会再次启动它。Sensor Hal的源文件就一个,即service.cpp,下面看看其启动流程

//hardware/interfaces/sensors/2.0/multihal
int main(int /* argc */, char**
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值