Android HAL 使系统卡在 poll() 函数中

Android HAL makes system stuck in poll() function

我们正在开发自定义开发板,目前,我们正在 Android 7.1 上实施 "Sensor HAL"。

我们已经根据 Android 传感器服务要求(sensor.h)实施了 "Sensor HAL" API,并且能够为此构建 .so 文件。 (由于一些自定义修改,我们无法使用已经可用的 HAL。)

集成 "Sensor HAL" 后,我们看到 Android 进入挂起状态,直到 Android 锁定屏幕后才能到达。

我们的观察w.r.tAndroid传感器服务行为

  1. SensorService:nuSensorService 正在启动...

  2. "Sensor HAL" 由传感器服务加载

  3. "Sensor HAL"开启调用成功

  4. "Sensor HAL" get_sensor_list调用成功

  5. "Sensor HAL" poll函数每次调用成功。

  6. Android 启动卡在 "Bootanimation" 屏幕

参考日志

01-01 00:58:48.258 1461 1461 D SensorService: nuSensorService starting...
01-01 00:58:48.260 1461 1461 D Sensor_HAL: OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Exiting... OpenSensors: name=poll
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.260 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 0, enabled 0
01-01 00:58:48.261 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 1, enabled 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @SensorDeviceActivate, handle 2, enabled 0
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Entering @GetSensorList
01-01 00:58:48.262 1461 1461 D Sensor_HAL: Exiting @GetSensorList
01-01 00:58:48.264 1461 1463 D SensorService: nuSensorService thread starting...
01-01 00:58:49.953 1461 1462 D SensorService: new thread SensorEventAckReceiver

=> 以上调用了导致系统挂起的轮询函数。

=> Android 引导卡在此处。

请注意,poll() 命令的当前实现是return将带有时间戳的虚拟加速度计事件发送到上层。 return 值是复制的数据事件数。

如有不妥之处或理解有误,请指正。

伙计们,

最后,我能够通过添加相同功能的延迟来解决这个问题。

正在线程中调用 Poll() 函数并将事件发送到系统客户端 (SensorManager)。由于我们是直接从函数返回,没有任何延迟,所以事件会以更快的速度推送,没有时间调度其他线程。

要完成此操作,请考虑需要一定的延迟时间。