android-source - Android 上的/system/lib/hw/sensors.*.so 有何用途(来源在哪里)?

标签 android-source galaxy android-sensors samsung-mobile cyanogenmod

我手机的 Android 在 /system/lib/hw 下有以下文件:

  1. sensors.exynos4.so
  2. sensors.smdk4210.so

这些动态库位于指南针、陀螺仪和环境光等传感器链中的某个位置。

第一个文件 (sensors.exynos4.so) 来自发行版本身(为 i9100 运行 CyanogenMod 10.1),第二个文件 (sensors.smdk4210.so) 是我从手机的库存 ROM 中获取的文件 (SHW) -M250S,“韩国 S2”,i9100 的变体)并将其复制到那里。

问题1:什么在使用这些文件?

对系统中的所有二进制文件和库执行ldd(实际上是readelf或objdump)不会泄露这些文件的任何用户。我的结论:动态链接后,必须有人在运行时像插件一样加载它们!但是谁/什么? (请提供源代码文件名或代码浏览器链接)

这些库的用户在没有任何配置的情况下从第一个库切换到第二个库(在我将其放置在那里之后)。我想探究这个谜团。

问题2:这些文件的来源在哪里?

这些文件(至少)包含传感器的配置(例如它在板上的位置、值范围和步骤)。我想为我的手机生成一个正确的。如果我有两者的来源,那就很容易做到了。 – 仅使用 CyanogenMod 版本,我至少可以猜测必要的修正。

注释:

  1. 没有猜测答案。
  2. 如果您的部分答案是“二元”:
    1. 给我指出 CyanogenMod 源中的 blob 或提取它们的脚本。
    2. 沿着链找到第一个使用它们的开源库/程序。
  3. 这些问题并非真正特定于设备。 – 对于任何设备进行回答,情况应该类似(AOSP、AOKP、CyanogenMod,...)。

最佳答案

它们是二进制 blob。

有sensors.exynos4.so和其他专有的blob https://github.com/chris41g/proprietary_samsung_epic4gtouch/tree/master/proprietary/lib/hw

可以使用 extract-files 脚本从正在运行的设备中提取 blob,该脚本会从项目中的proprietary-files.txt 中读取专有文件列表,无论您要为其构建 CM 的设备如何。

尝试用谷歌搜索文件,或者浏览 CM 树或他们的 wiki。

HAL 是硬件抽象层,是用于将传感器数据从内核/设备驱动程序返回到用户空间的接口(interface)。 找到了这个 pdf 文件,其中讨论了构建 Android HAL,但针对不同的设备,并且描述的输出是

After having successfully downloaded and compiled the Android sources, the user can compile and add/substitute the sensor HAL library.To do this, copy the sensor HAL library folder in the android sources path, usually located in:
[Root Android Sources]/vendor/[vendor name]/[boardname]/

Before the build operation of the library, the user must initialize the Android environment:
[Root Android Sources]$ source build/envsetup.sh
[Root Android Sources]$ lunch [target board]

It is now possible to build the library; just launch the “mm” command in the HAL folder. The result of this process is a dynamic library located in:
[Root Android Sources]/out/target/product/[board name]/system/lib/hw/sensors.[board name].so

对于传感器,SensorService 会加载 HAL,以便它可以与传感器通信。

HAL
Building HAL

更新:

对我的 CM 树进行了更多挖掘 device/samsung/i9100 包含构建sensors.exynos4.so 的Android.mk 文件。 .mk 文件将模块指定为
LOCAL_MODULE :=sensors.$(TARGET_BOARD_PLATFORM) 设置为 device/samsung/galaxys2-common/BoardCommonConfig.mk。

device/samsung/i9100/libsensors 中有此设备的源代码。查看 device/samsung/i9100g,但是没有 libsensors,并且该设备需要运行 CM 脚本来从正在运行的设备中提取 blob,因此源的可用性仍然因设备而异。

另外,还观察到 BoardConfig 将一些值设置为 smdk4210。

关于android-source - Android 上的/system/lib/hw/sensors.*.so 有何用途(来源在哪里)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18389903/

相关文章:

Android x86 移植,无法正常工作

android - 在哪里放置 .so 文件,以便它包含在最终构建中

java - 禁用加速度计并使用按键输入对其进行模拟

java - 如何使用标准 API 访问 Galaxy s5 上的心率传感器?

java - 导入AOSP代码到IDEA/Intellij/Android Studio失败

android - 在 android 编译中禁用 JACK

android - Samsung Galaxy 设备无法使用 geolocation.getCurrentPosition

android - 访问 Samsung Galaxy S7 Micro SD 卡的根目录

javascript - 检测 HTML 页面中的手指悬停事件

android - SensorEvent.timestamp 不一致