1.简述
Android的HAL层解析,HAL层主要作用,承上启下。
1.1 向上提供标准接口(给Framework调用)
代码路径:hardware/interfaces/sensors/1.0/ISensors.hal
package android.hardware.sensors@1.0;
interface ISensors {
getSensorsList() generates (vec<SensorInfo> list);
setOperationMode(OperationMode mode) generates (Result result);
activate(int32_t sensorHandle, bool enabled) generates (Result result);
poll(int32_t maxCount) generates (
Result result,
vec<Event> data,
vec<SensorInfo> dynamicSensorsAdded);
batch(int32_t sensorHandle,
int64_t samplingPeriodNs,
int64_t maxReportLatencyNs) generates (Result result);
flush(int32_t sensorHandle) generates (Result result);
injectSensorData(Event event) generates (Result result);
registerDirectChannel(SharedMemInfo mem)
generates (Result result, int32_t channelHandle);
unregisterDirectChannel(int32_t channelHandle) generates (Result result);
configDirectReport(
int32_t sensorHandle, int32_t channelHandle, RateLevel rate)
generates (Result result, int32_t reportToken);
};
以上部分为固定内容。要遵循AOSP标准。 这个文件会被编译成 C++接口类 java接口类 Binder通信代码(跨进程通信)
1.2 向下对接驱动(读/dev/input/eventX)
打开设备节点 读取数据 转换单位 封装成Android需要的格式 这个部分就是厂商需要实现,放在了vendor分区。
2.整体流程
上层APP(顶层,应用使用) Framework(SensorManger、 SensorService) HAL接口层(标准、不能改) HAL实现层(Vendor分区,厂商实现) 内核驱动(/dev/input/eventX) 硬件芯片
HAL服务=将接口和实现绑定起来,供系统调用 开机后有init进程启动,运行在vendor分区。 有独立的进程:android.hardware.sensors@1.0-service
上层jave---HAL层C++---驱动c
【上层Framework】
SensorService(JAVA/C++)
调用标准接口
【HAL 接口层 *.hal】
activate()
setCallback()
flush()
【HAL 实现层 vendor分区】
打开驱动
读取数据
回调给上层
【内核驱动】
/dev/input/eventX
Framework里面的关键服务SensorService(native层C++) 代码路径:frameworks/native/services/sensorservice/SensorService.cpp 注意:旧版的Legacy HAL,和新版本的ISensors
您还没有登录,请您登录后发表评论。