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**

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

被折叠的 条评论
为什么被折叠?



