Android Gsensor 移植

本文记录在某芯片平台上移植Gsensor 驱动和适配hal层的过程。

开发环境: android12 版本

  • Gsensor 总体框架
  • Gsensor驱动移植和调试
  • Gsensor hal 层的移植和调试

一. Gsensor总体框架

传感器 Multi-HAL  |  Android Open Source Project (google.cn)   Sensors Multi-HAL 2(适用于搭载 Android 10 或更高版本的设备)在 Sensors HAL 2 的基础上引入了多个抽象化功能,以便更轻松地与 HAL API 交互。  谷歌的说明 在不实际接触的时候是很难理解的。

这里要说明的是 图中 Sensor Hardware Interface  以独立进程存在

这个进程的bin文件位于 vendor/bin/hw 。

进程入口函数如下:

int main(int /* argc */, char** /* argv */) {
    configureRpcThreadpool(1, true);

    android::sp<ISensors> halProxy = new HalProxyV2_1();
    if (halProxy->registerAsService() != ::android::OK) {
        ALOGE("Failed to register Sensors HAL instance");
        return -1;
    }

    joinRpcThreadpool();
    return 1;  // joinRpcThreadpool shouldn't exit
}

HalProxyV2_1 继承自 HalProxy

HalProxy::HalProxy() {
    const char* kMultiHalConfigFile = "/vendor/etc/sensors/hals.conf";
    initializeSubHalListFromConfigFile(kMultiHalConfigFile);
    init();
}

 kMultiHalConfigFile指向的文件 hals.conf 中存放子SensorHal的动态库。 hals.conf 的内容如下:

android.hardware.sensors@2.1-multihal-invensense.so

每家Gsensor厂家 给出的so 库的名字可能不一样。这里的so库文件对应上面SensorHal框架图的Sensors Hardware Module。

配置文件中除了支持绝对路径的精准查外,还支持在lib目录下根据给定动态库名字的方式进行查找。只要找到符合的动态库就调用dlopen打开并返回它的handle。后面通过操作handle就可以使用动态库中提供的各种资源了。

二. Gsensor驱动移植和调试

  1. 拷贝驱动文件到linux 源码目录
  2. 拷贝头文件到 linux源码目录下
  3. 添加编译配置
  4. 更新DTS
  5. 配置中断
  6. 测试驱动是否正常工作

三. Gsensor HAL 层的移植和调试

  1. 拷贝文件
  2. 增加编译脚本文件,增加安全策略
  3. 编译android.hardware.sensors@2.1-multihal-invensense.so文件,每家厂商编译出的文件可能是不一样的。

  4. 修改 hals.conf 文件, 将hals.conf  的so库文件名改成 厂商代码编译出的so 库的文件名。并将 hals.conf 拷贝到 vendor/etc/sensors/ 目录下
  5. 用APP测试 是否能拿到 gsensor的数据

如果应用层能在 onSensorChanged 的回调用拿到sensor的数据 说明Gsensor从应用到驱动的通路打通了。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值