Android 安卓自动睡眠

Android 安卓自动睡眠,android,sleep,wakelock,android-kernel,Android,Sleep,Wakelock,Android Kernel,目前我正在锁定Android内核,我想知道唤醒锁定机制。如何以及在何处指定间隔时间来定义手机将挂起的时间点。是否有一个sysfs接口将值(以毫秒或其他形式)传递给内核。例如,安卓操作系统设置中的睡眠选项在内核中的变化如何反映?在安卓资源中进行了一些研究和挖掘之后,我发现PowerManagerService正在测量自上次活动以来的时间,以便将设备发送到睡眠状态。在进行了一些研究和挖掘之后我看到的Android消息来源是,PowerManagerService正在测量自上次活动以来的时间,以便将设

目前我正在锁定Android内核,我想知道唤醒锁定机制。如何以及在何处指定间隔时间来定义手机将挂起的时间点。是否有一个sysfs接口将值(以毫秒或其他形式)传递给内核。例如,安卓操作系统设置中的睡眠选项在内核中的变化如何反映?

在安卓资源中进行了一些研究和挖掘之后,我发现PowerManagerService正在测量自上次活动以来的时间,以便将设备发送到睡眠状态。

在进行了一些研究和挖掘之后我看到的Android消息来源是,PowerManagerService正在测量自上次活动以来的时间,以便将设备发送到睡眠状态。

这是关于挂起/恢复代码流(在Android手机上)的一个重要话题。内核中的代码流已通过以下方式说明:

Android receice event.POWER并确认不存在唤醒锁定后, Android通过echo mem> /系统/电源/状态:

状态存储>>下午暂停>>进入状态>>暂停准备>> 暂停设备并进入>>dpm\U暂停\U启动>>dpm\U暂停>> 设备\u挂起>>\u设备\u挂起-->挂起\u输入(由调用 暂停设备,并在设备暂停完成后进入)

此外,内核私有接口(机制)将系统挂起到Android。但大多数控制逻辑(策略)都在Android系统的PowerManagerService中。我希望这能帮助您了解按下电源键后系统的实际功能

1.报告PowerKey
  • 在内核中按输入系统报告电源键事件,可能是这样的:(取决于您是什么SoC平台)

    输入报告键(powerkeydev,key\u POWER,1) 输入同步(powerkeydev); msleep(1); 输入报告键(powerkeydev,key\u POWER,1) 输入同步(powerkeydev)

    KEY_POWER=116在include/uapi/linux/input.h中定义

  • android中的关键代码映射 android/frameworks/base/data/keyboards/Generic.kl android/frameworks/native/include/input/KeycodeLables.h

  • 拦截关键事件 android/frameworks/base/services/core/java/com/anroid/server/policy/PhoneWindowManager.java InterceptKeyBeforeQueue()>>interceptPowerKeyUp()>>powerPress()>>powerPress>>case SHORT\u PRESS\u POWER\u GO\u TO\u SLEEP>>mPowerManager.goToSleep

  • 在PowerManagerService中管理唤醒锁: java:goToSleep()->mService.goToSleep() PowerManagerService.java:goToSleep()->goToSleepInternal->goToSleepNoUpdateLocked()->updatePowerStateLocked()->updateSuspendBlockerLocked()(清除唤醒锁

  • 2.libsuspend触发挂起
  • suspend_thread_func检查应每100ms暂停一次。所有唤醒锁清除后:

    android/system/core/libsuspend/autosuspend.c: suspend_thread_func()->write(state_fd、sleep_state、strlen(sleep_state))

  • 此菜单:echo“mem”>/sys/power/state,触发内核中的挂起流

    3.如何设置自动悬挂线程? 线程挂起\u线程\u func()是由以下人员创建的:

  • 初始化自动暂停

    android/system/core/libsuspend/autosuspend.c:int autosuspend\u启用(无效)

  • 在jni中调用autosuspend

    android/frameworks/base/services/core/jni/com\u android\u server\u power\u PowerManagerService.cpp: autosuspend_enable()->nativeSetAutoSuspend()

  • 由PowerManagerService初始化

    android/services/core/java/com/android/server/power/PowerManagerService.java:nativeSetAutoSuspend(布尔启用)


  • 这是一个关于挂起/恢复代码流(在android手机上)的大话题。内核中的代码流已通过以下方式说明:

    Android receice event.POWER并确认不存在唤醒锁定后, Android通过echo mem> /系统/电源/状态:

    状态存储>>下午暂停>>进入状态>>暂停准备>> 暂停设备并进入>>dpm\U暂停\U启动>>dpm\U暂停>> 设备\u挂起>>\u设备\u挂起-->挂起\u输入(由调用 暂停设备,并在设备暂停完成后进入)

    更重要的是,内核私有接口(机制)可以将系统挂起到Android。但大多数控制逻辑(策略)都在Android系统的PowerManagerService中。我希望这能帮助您了解在按下电源键后系统的真正功能

    1.报告PowerKey
  • 在内核中按输入系统报告电源键事件,可能是这样的:(取决于您是什么SoC平台)

    输入报告键(powerkeydev,key\u POWER,1) 输入同步(powerkeydev); msleep(1); 输入报告键(powerkeydev,key\u POWER,1) 输入同步(powerkeydev)

    KEY_POWER=116在include/uapi/linux/input.h中定义

  • android中的关键代码映射 android/frameworks/base/data/keyboards/Generic.kl android/frameworks/native/include/input/KeycodeLables.h

  • 拦截关键事件 android/frameworks/base/services/core/java/com/anroid/server/policy/PhoneWindowManager.java InterceptKeyBeforeQueue()>>interceptPowerKeyUp()>>powerPress()>>powerPress>>case SHORT\u PRESS\u POWER\u GO\u TO\u SLEEP>>mPowerManager.goToSleep

  • 在PowerManagerService中管理唤醒锁: java:goToSleep()->mService.goToSleep() PowerManagerService.java:goToSleep()->goToSleepInternal->goToSleepNoUpdateLocked()->updatePowerStateLocked()->updateSuspendBlockerLocked()(清除唤醒锁

  • 2.libsuspend触发挂起
  • suspend_thread_func检查应每100ms暂停一次。所有唤醒锁清除后:

    android/system/core/libsuspend/autosuspend.c: suspend_thread_func()->write(state_fd、sleep_state、strlen(sleep_state))

  • 此菜单为:echo“mem”>/sys/po