我手机的 Android 在 /system/lib/hw
下有以下文件:
- sensors.exynos4.so
- sensors.smdk4210.so
这些动态库位于指南针、陀螺仪和环境光等传感器链中的某个位置。
第一个文件 (sensors.exynos4.so) 来自发行版本身(为 i9100 运行 CyanogenMod 10.1),第二个文件 (sensors.smdk4210.so) 是我从手机的库存 ROM 中获取的文件 (SHW) -M250S,“韩国 S2”,i9100 的变体)并将其复制到那里。
问题1:什么在使用这些文件?
对系统中的所有二进制文件和库执行ldd
(实际上是readelf或objdump)不会泄露这些文件的任何用户。我的结论:动态链接后,必须有人在运行时像插件一样加载它们!但是谁/什么? (请提供源代码文件名或代码浏览器链接)
这些库的用户在没有任何配置的情况下从第一个库切换到第二个库(在我将其放置在那里之后)。我想探究这个谜团。
问题2:这些文件的来源在哪里?
这些文件(至少)包含传感器的配置(例如它在板上的位置、值范围和步骤)。我想为我的手机生成一个正确的。如果我有两者的来源,那就很容易做到了。 – 仅使用 CyanogenMod 版本,我至少可以猜测必要的修正。
注释:
- 没有猜测答案。
- 如果您的部分答案是“二元”:
- 给我指出 CyanogenMod 源中的 blob 或提取它们的脚本。
- 沿着链找到第一个使用它们的开源库/程序。
- 这些问题并非真正特定于设备。 – 对于任何设备进行回答,情况应该类似(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,以便它可以与传感器通信。
更新:
对我的 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/