Android8.0 下的 qcom8953 平台上的 sensor 调用过程

本文介绍了Android 8.0在QCOM8953平台上sensor的处理方式,强调了为了降低功耗,sensor数据在ADSP中处理。详细解析了从framework调用到sensor HAL层的加载流程,包括如何通过hw_get_module()加载.so库,并概述了传感器驱动的注册和添加步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、Android Sensor的框架

在刚开始的时候,Android上的sensor调用还是在走内核的,通过芯片厂商编写相应的设备驱动来生成设备节点供上层访问,以读取设备节点的方式来读取sensor数据,但是后来人们发现这样做会增加功耗,因为sensor需要不断的上报数据,不断的更新数据,所以这就要求处理器不断为其工作,所以就会影响待机功耗,故高通在MSM8960之后就提出了一种方案,把sensor数据的处理放到ADSP中处理,ADSP在处理音频数据的数据顺便把sensor数据处理掉,降低功耗。因此在MSM8953后sensor数据的处理都放在ADSP中处理,并向以往那样通过节点的方式来获取数据。下面就是sensor数据处理的结构框图:

二、sensor的调用流程

1.framework调用流程图

1.1 hardware加载sensor hal层模块的代码流程

      上层会起一个SensorService服务,在随后的第一次初始化时,其onFirstRef会被调用(均继承自RefBase虚基类),紧接着,它会获取Sensors::Sensors()构造函数,去通过hw_get_module()函数去加载sensor hal层的代码以及sensor 结构体。

Sensors::Sensors()
    : mInitCheck(NO_INIT),
      mSensorModule(nullptr),
      mSensorDevice(nullptr) {
    status_t err = OK;
    if (UseMultiHal()) {
        mSensorModule = ::get_multi_hal_module_info();
    } else {
        err = hw_get_module(
            SENSORS_HARDWARE_MODULE_ID,
            (hw_module_t const **)&mSensorModule);
    }
    if (mSensorModule == NULL) {
        err = UNKNOWN_ERROR;
    }

    if (err != OK) {
        LOG(ERROR) << "Couldn't load "
                   << SENSORS_HARDWARE_MODULE_ID
                   << " module ("
                   << strerror(-err)
                   << ")";

        mInitCheck = err;
        return;
    }

    err = sensors_open_1(&mSensorModule->common, &mSensorDevice);

    if (err != OK) {
        LOG(ERROR) << "Couldn't open device for module "
                   << SENSORS_HARDWARE_MODULE_ID
                   << " ("
                   << strerror(-err)
                   << ")";

        mInitCheck = err;
        return;
    }

    // Require all the old HAL APIs to be present except for injection, which
    
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值