android-5.0 sensor工作原理—sensorservice的启动(一)

本文详细介绍了Android系统启动后如何通过SystemServer加载并启动SensorService。从systemserver.java的run函数开始,经过JNI层转换,调用C++方法nativeInit(),在com_android_server_SystemServer.cpp中实例化SensorService。接着,SensorService通过onFirstRef()进行初始化,加载硬件库文件,获取传感器列表,并打开传感器。整个过程涉及动态链接库加载、硬件模块交互和传感器状态设置。
摘要由CSDN通过智能技术生成

sensorservice的启动:

1. systemserver.java的run函数:

 private void run() {

……

        // Initialize native services.
        System.loadLibrary("android_servers");
        nativeInit();

……

}

   Android在启动之后通过Zygote来管理和启动android server,他首先会运行SystemServer.java里面的run函数,这里主要是load android_server.so库,然后调用nativeInit()来启动sensorservice。


2. nativeInit()是本地方法,上层Java调用本地C++方法,需要通过JNI层的转化,在com_android_server_SystemServer.cpp中:

static void android_server_SystemServer_nativeInit(JNIEnv* env, jobject clazz) {
    char propBuf[PROPERTY_VALUE_MAX];
    property_get("system_init.startsensorservice", propBuf, "1");
    if (strcmp(propBuf, "1") == 0) {
        // Start the sensor service
        SensorService::instantiate();
    }
}

/*
 * JNI registration.
 */
static JNINativeMethod gMethods[] = {
    /* name, signature, funcPtr */
    { "nativeInit", "()V", (void*) android_server_SystemServer_nativeInit },
};

int register_android_server_SystemServer(JNIEnv* env)
{
    return jniRegisterNativeMethods(env, "com/android/server/SystemServer",
            gMethods, NELEM(gMethods));
}

首先建立nativeInit()方法对本地方法android_server_SystemServer_nativeInit()的映射,然后jniRegisterNativeMethods注册该方法,在上层调用nativeInit()方法就可以调用本地方法android_server_SystemServer_nativeInit()通过SensorService::instantiate();来实例化sensorservice,主要是向servicemanager注册sensorservice。

    static status_t publish(bool allowIsolated = false) {
        sp<IServiceManager> sm(defaultServiceManager());
        return sm->addService(
                String16(SERVICE::getServiceName()),
                new SERVICE(), allowIsolated);
    }
  static void instantiate() { publish(); }

addservice()方法主要是完成向servicemanager注册sensorservice服务,原型如下:

 virtual status_t            addService( const String16& name,
                                            const sp<IBinder>& service,
                                            bool allowIsolated = false) = 0;

其第二个参数也就是new SERVICE()是强引用sp sensorservice,所以会调用到SensorService::onFirstRef(),这样就开始了sensorservice的一系列初始化工作。

3. SensorService::onFirstRef()

void SensorService::onFirstRef()
{
    ALOGD("nuSensorService starting...");

    SensorDevice& dev(SensorDevice::getInstance());

    if (dev.initCheck() == NO_ERROR) {
        sensor_t const* list;
        ssize_t count = dev.getSensorList(&list);
        if (count > 0) {
            ssize_t orientationIndex = -1;
            bool hasGyro = false;
            uint32_t virtualSensorsNeeds =
                    (1<<SENSOR_TYPE_GRAVITY) |
                    (1<<SENSOR_TYPE_LINEAR_ACCELERATION) |
                    (1<<SENSOR_TYPE_ROTATION_VECTOR);

            mLastEventSeen.setCapacity(count);
            for (ssize_t i=0 ; i<count ; i++) 
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: ams1117-5.0是一种稳压电路,用于将较高的电源电压稳定为5V的固定电压。它通常被使用在微控制器、单片机、传感器等电路中,作为这些电路的电源模块,提供稳定的电源电压。 ams1117-5.0的原理图包括三部分:输入、稳压模块和输出。输入部分用于接受输入电压,稳压模块用于将电压稳定到5V,输出部分用于提供稳定的输出电压。 输入部分包括输入电压接口、输入电容和输入过滤电阻。输入电容用于滤波,稳定输入电压,输入过滤电阻用于在输入前级提供EMI过滤。 稳压模块是整个稳压器的核心部分。它由参考电压、反馈电路、误差放大器和功率晶体管组成。参考电压用于提供稳定的基准电压,反馈电路用于控制输出电压。误差放大器用于比较参考电压与反馈电压之间的差距,确定控制功率晶体管的工作状态,从而稳定输出电压。 输出部分包括输出电容和输出电阻。输出电容用于滤波,稳定输出电压,输出电阻用于在输出侧提供EMI过滤。 ams1117-5.0的原理图简单明了,易于理解。它的稳定性好,输出电压准确可靠,是电子设计中常见的稳压电路之一。 ### 回答2: AMS1117-5.0是一种线性稳压器件,它可以输入任意电压,在输出端稳定输出5V的直流电压。在电路设计中,我们可以直接采用AMS1117-5.0芯片来提供稳压电源,简化电路设计,提高系统稳定性。 AMS1117-5.0的原理图如图所示。它由输入端、输出端、电流限制器、电压参考源等组成。 输入端是电路的电源输入端,该芯片能够接受5V-12V的直流电源输入。当电源连接好后,输入电流将被限制器限制到1.2A,保证芯片能够正常工作。 输出端是电路的输出端,可以输出5V的稳定直流电压。该芯片内部集成了一个反馈电路,当输出电压低于设定值5V时,反馈电路会自动调整芯片的工作状态,使得输出电压恢复到设定值5V。该反馈电路能够保证输出稳定性。 在电路中,可以根据需要选择不同的电容来滤波和稳定输出电压。AMS1117-5.0推荐使用22μF以上的输出电容和10μF以上的输入电容。 总之,AMS1117-5.0是一款性能稳定、功能强大的线性稳压器件,适用于各种电子设备的电路设计,可以极大地提高系统的稳定性和电源质量。 ### 回答3: AMS1117-5.0是一种线性稳压器,在电子设备中常用于电源部分以稳定电压。其原理图如下: ![AMS1117-5.0原理图](https://www.elecfreaks.com/store/download/datasheet/M071/AMS1117-5V.png) AMS1117-5.0的原理图中包含了多个元件,包括三个引脚(输入、输出和地)、输电电容、反向保护二极管和稳压器本身。这些元件相互作用来实现稳定的5V输出。 首先,输入电压从输入引脚进入芯片,并经过反向保护二极管进行保护。稳压器本身将输入电压调整为适当的电压,并且保持在输出引脚可靠地供电。在这个过程中,输入电容器可以减少电源输入引脚的峰值电流,从而使输入电源更加稳定。 随着输出负载的变化,稳压器可以自适应地调整输出电压来保持稳定。输出电容器可以在这个过程中充当电源附加电容器,从而减少输出电压的波动和噪声。 总的来说,AMS1117-5.0原理图的设计非常简单而有效。通过适当地选择输入电容器和输出电容器,以及反向保护二极管,可以实现高效、稳定的稳压器输出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值