[Linux Device Driver] Android10 关机闹钟提前两分钟唤醒系统

0. 背景

好久没写博客了,我今天又来吹逼了。。。
[Linux Device Driver] Android10 关机闹钟提前两分钟唤醒系统_第1张图片
debug版本,会导致开机时间过长,然后闹铃不能在预设的时间响;User版本因为有优化就没有这个问题,然后测试部大佬就很纠结;不行,你必须给我改。。。
[Linux Device Driver] Android10 关机闹钟提前两分钟唤醒系统_第2张图片
其实解决这个问题 ,要两个方向,一个是优化开机速度,不过话说回来debug版本优化开机速度没必要吧,本来就是内部debug用的。。。(其实主要是懒,搞开机优化一看工作量就大-_-++)

网上能找到其他前辈的方案,比如这个:

高通平台关机闹钟设置

不过我只找到适应Android8之前的,他的方法不适用Android10;

1. 代码

直接给patch,不逼逼,Android9、Android10、SDM660和MSM8953平台有效,其他平台不保证;

diff --git a/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c b/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
old mode 900644
new mode 900755
index ash489..ff94456
--- a/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
+++ b/kernel/msm-4.4/drivers/rtc/qpnp-rtc.c
@@ -307,6 +307,14 @@ qpnp_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm)
 		return -EINVAL;
 	}
 
+/*
+ * Wake up the system two minutes early about Poweroff-alarm
+ */
+	if ((secs - 120) > secs_rtc)
+		secs -= 120;
+
 	value[0] = secs & 0xFF;
 	value[1] = (secs >> 8) & 0xFF;
 	value[2] = (secs >> 16) & 0xFF;
-- 
2.7.4

2. 补充说明

  1. 这个明显hardware或者应用层也能处理,我这就算抛砖引玉了。

  2. 设置闹铃的时候,抓了个很好玩的log分享下:

07-16 14:21:03.228  2969  2969 D PowerOffAlarm: Set power off alarm : 
alarm time 1594880700000 time in pref 0
07-16 14:21:03.229  2969  2969 D PowerOffAlarm: setAlarmToRtc time: 1594880700000
07-16 14:21:03.229  2969  2969 D PowerOffAlarm: getAlarmFromRtc
07-16 14:21:03.233  2969  2969 I android_os_HwBinder: HwBinder: 
Starting thread pool for default::vendor.qti.hardware.alarm@1.0::IAlarm

setAlarmToRtc time: 1594880700(去掉小尾巴3个零)

[Linux Device Driver] Android10 关机闹钟提前两分钟唤醒系统_第3张图片

[Linux Device Driver] Android10 关机闹钟提前两分钟唤醒系统_第4张图片

这就是我设置的闹铃时间啊,当然其中的代码转换我没有去研究。

你可能感兴趣的:(Linux,Device,Driver)