休眠唤醒处理方法、装置、电子设备及存储介质与流程

文档序号:32442225发布日期:2022-12-06 22:28阅读:89来源:国知局
休眠唤醒处理方法、装置、电子设备及存储介质与流程

1.本公开涉及计算机技术领域,尤其涉及一种休眠唤醒处理方法、装置、电子设备及存储介质。


背景技术:

2.片上系统(system on chip,soc),指的是在单个芯片上集成处理器、总线、存储器、各种外设等模块,是一个复杂完整的系统。在汽车领域,soc可以应用于车载屏幕控制。
3.休眠和唤醒是soc的重要功能。其中,休眠(suspend)是指soc进入一种低功耗模式,在这种模式下,cpu以及各种外设耗电量很小,只有内存进入自刷新模式;唤醒(resume)是指由于外部唤醒源头发生了唤醒事件,触发soc从suspend模式中退出并进入正常工作模式。
4.为了保证soc的休眠和唤醒功能的正常运行,需要对休眠和唤醒过程进行调试,如何找到一种不影响休眠唤醒过程的性能的调试手段,成为目前的研究重点。


技术实现要素:

5.为了解决上述技术问题或者至少部分地解决上述技术问题,本公开的至少一个实施例提供了一种休眠唤醒处理方法、装置、电子设备及存储介质。
6.第一方面,本公开提供了一种休眠唤醒处理方法,包括:
7.获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,其中,所述预设函数为休眠函数或唤醒函数;
8.获取调用所述预设函数结束时的系统时间作为第一结束时间;
9.在所述第一结束时间与所述第一开始时间之间的差值大于预设阈值的情况下,将所述第一设备的设备信息写入系统日志中。
10.第二方面,本公开提供了一种休眠唤醒处理装置,包括:
11.第一获取模块,用于获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,其中,所述预设函数为休眠函数或唤醒函数;
12.第二获取模块,用于获取调用所述预设函数结束时的系统时间作为第一结束时间;
13.处理模块,用于在所述第一结束时间与所述第一开始时间之间的差值大于预设阈值的情况下,将所述第一设备的设备信息写入系统日志中。
14.第三方面,本公开提供了一种电子设备,包括:处理器和存储器;所述处理器通过调用所述存储器存储的程序或指令,用于执行本公开实施例提供的任一所述的休眠唤醒处理方法。
15.第四方面,本公开提供了一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行本公开实施例提供的任一所述的休眠唤醒处理方法。
16.第五方面,本公开提供了一种计算机程序产品,所述计算机程序产品用于执行本公开实施例提供的任一所述的休眠唤醒处理方法。
17.本公开实施例提供的技术方案与现有技术相比至少具有如下优点:
18.在本公开实施例中,通过获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,以及获取调用预设函数结束时的系统时间作为第一结束时间,其中,预设函数为休眠函数或唤醒函数,进而在第一结束时间与第一开始时间之间的差值大于预设阈值的情况下,将第一设备的设备信息写入系统日志中。采用上述技术方案,实现了只有在设备的休眠或唤醒的耗时超过预设阈值时,才将设备的设备信息写入系统日志中,而不是将每个设备的设备信息均写入系统日志中,从而能够避免记录每个设备的设备信息的耗时对soc休眠唤醒性能的影响,降低调试手段本身对休眠唤醒流程造成的影响,也避免了对休眠唤醒耗时较短的设备进行分析,只需分析系统日志中记录的耗时较长的设备即可,能够节省休眠唤醒问题的调试时长,提高调试效率。
附图说明
19.此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。
20.为了更清楚地说明本公开实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
21.图1为本公开一实施例提供的休眠唤醒处理方法的流程示意图;
22.图2为本公开另一实施例提供的休眠唤醒处理方法的流程示意图;
23.图3为本公开一实施例提供的休眠流程示意图;
24.图4为本公开一实施例提供的唤醒流程示意图;
25.图5为本公开一实施例提供的休眠唤醒处理装置的结构示意图。
具体实施方式
26.为了能够更清楚地理解本公开的上述目的、特征和优点,下面结合附图和实施例对本公开作进一步的详细说明。可以理解的是,所描述的实施例是本公开的一部分实施例,而不是全部的实施例,此处所描述的具体实施例仅仅用于解释本公开,而非对本公开的限定,在不冲突的情况下,本公开的实施例及实施例中的特征可以相互组合。基于所描述的本公开的实施例,本领域普通技术人员所获得的所有其他实施例,都属于本公开保护的范围。
27.在下面的描述中阐述了很多具体细节以便于充分理解本公开,但本公开还可以采用其他不同于在此描述的方式来实施;显然,说明书中的实施例只是本公开的一部分实施例,而不是全部的实施例。
28.为了保证soc的休眠和唤醒功能的正常运行,通常需要对休眠和唤醒过程进行调试。目前采用的调试手段中,需要在调用soc中每个设备的休眠或唤醒函数前后记录系统时间,计算并打印时间差用于对休眠唤醒问题进行调试。
29.然而,soc上可能有几百个设备,每个设备都打印时间差,耗时较长,使得soc的休眠唤醒过程耗时较长,影响休眠唤醒性能,严重时可能导致soc休眠唤醒超时,从而触发超
时重启soc,导致soc休眠唤醒失败。另外,当soc超时重启或者由于休眠唤醒过程中的其他问题导致soc重启时,可能导致系统日志中的部分信息丢失,从而使得无法从系统日志中调试出休眠唤醒异常的设备,使得调试手段失效,无法定位问题所在。
30.针对上述问题,本公开提供了一种休眠唤醒处理方法,通过获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,以及获取调用预设函数结束时的系统时间作为第一结束时间,其中,预设函数为休眠函数或唤醒函数,进而在第一结束时间与第一开始时间之间的差值大于预设阈值的情况下,将第一设备的设备信息写入系统日志中,由此,实现了只有在设备的休眠或唤醒的耗时超过预设阈值时,才将设备的设备信息写入系统日志中,而不是将每个设备的设备信息均写入系统日志中,从而能够避免记录每个设备的设备信息的耗时对soc休眠唤醒性能的影响,降低调试手段本身对休眠唤醒流程造成的影响,也避免了对休眠唤醒耗时较短的设备进行分析,只需分析系统日志中记录的耗时较长的设备即可,能够节省休眠唤醒问题的调试时长,提高调试效率。
31.图1为本公开一实施例提供的休眠唤醒处理方法的流程示意图,该休眠唤醒处理方法可以由本公开实施例提供的休眠唤醒处理装置执行,该休眠唤醒处理装置可以采用软件和/或硬件实现,并可集成在任意具有处理能力的电子设备上,例如电脑、车载终端等设备。
32.如图1所示,本公开实施例提供的休眠唤醒处理方法,可以包括以下步骤:
33.步骤101,获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,其中,所述预设函数为休眠函数或唤醒函数。
34.soc上集成有多个设备,每个设备对应有自己的休眠函数和唤醒函数,当对soc进行休眠或唤醒时,需要依次调用soc中每个设备对应的休眠函数或唤醒函数,来依次休眠或唤醒各个设备。本公开实施例中,当休眠或者唤醒开始时,可以获取调用soc中第一设备的休眠函数或唤醒函数时的系统时间,将该系统时间作为调用休眠函数或唤醒函数的开始时间,记为第一开始时间。
35.其中,第一设备为soc中的任一设备。
36.能够理解的是,当预设函数为休眠函数时,第一开始时间为对第一设备启动休眠过程的开始时间;当预设函数为唤醒函数时,第一开始时间为对第一设备启动唤醒过程的开始时间。
37.步骤102,获取调用所述预设函数结束时的系统时间作为第一结束时间。
38.本公开实施例中,调用完成第一设备的休眠函数或者唤醒函数时,可以获取调用完成时刻的系统时间,将该系统时间作为调用休眠函数或者唤醒函数的结束时间,记为第一结束时间。
39.步骤103,在所述第一结束时间与所述第一开始时间之间的差值大于预设阈值的情况下,将所述第一设备的设备信息写入系统日志中。
40.本公开实施例中,获取了调用预设函数前后的第一开始时间和第一结束时间之后,可以计算第一结束时间与第一开始时间之间的差值,并将所得的差值与预设阈值进行比较,在第一结束时间与第一开始时间之间的差值大于预设阈值的情况下,则将第一设备的设备信息写入系统日志中。由此,只有当休眠或唤醒耗时超过预设阈值时,才将设备的设备信息写入打印在系统日志中,而不是事无巨细地把每个设备的信息都打印在系统日志
中,避免了无关设备对休眠或唤醒流程的干扰。
41.其中,预设阈值可以预先设定,针对休眠和唤醒,可以根据实际需求设置对应的阈值,比如设置休眠过程对应的阈值为第一阈值,设置唤醒过程对应的阈值为第二阈值,第一阈值和第二阈值可以相同也可以不同,本公开对此不作限制。比如,第一阈值和第二阈值可以均设置为200ms。当休眠第一设备时,如果第一结束时间与第一开始时间之间的差值大于第一阈值,则将第一设备的设备信息写入系统日志中;当唤醒第一设备时,如果第一结束时间与第一开始时间之间的差值大于第二阈值,则将第一设备的设备信息写入系统日志中。
42.其中,写入系统日志中的设备信息,可以包括但不限于设备名称、设备的唯一标识、调用休眠函数超时还是调用唤醒函数超时、调用休眠函数或者唤醒函数消耗的时长等信息。
43.在soc休眠或唤醒成功后,则可以从系统日志中查看哪些设备在休眠唤醒过程中耗时超过预设阈值,从而有针对性地分析系统日志中记录的设备的休眠唤醒函数,查找到耗时长的具体原因。
44.本公开实施例的休眠唤醒处理方法,通过获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,以及获取调用预设函数结束时的系统时间作为第一结束时间,其中,预设函数为休眠函数或唤醒函数,进而在第一结束时间与第一开始时间之间的差值大于预设阈值的情况下,将第一设备的设备信息写入系统日志中。采用上述技术方案,实现了只有在设备的休眠或唤醒的耗时超过预设阈值时,才将设备的设备信息写入系统日志中,而不是将每个设备的设备信息均写入系统日志中,从而能够避免记录每个设备的设备信息的耗时对soc休眠唤醒性能的影响,降低调试手段本身对休眠唤醒流程造成的影响,也避免了对休眠唤醒耗时较短的设备进行分析,只需分析系统日志中记录的耗时较长的设备即可,能够节省休眠唤醒问题的调试时长,提高调试效率。
45.在本公开的一种可选实施方式中,还可以将第一设备的第一设备名称、第一开始时间和第一结束时间写入预设的调试缓冲区中。
46.其中,调试缓冲区是用来记录当前正在休眠或唤醒的设备的设备信息的一段内存区域。
47.由于无法事先判断哪个设备会在休眠或唤醒过程中耗时过程,甚至一直无法完成休眠或唤醒过程,本公开实施例中,将当前正在休眠或唤醒设备的设备名称、开始时间和结束时间写入预设的调试缓冲区中,使得一旦发生超时重启,可以从该调试缓冲区中获取相关信息进行分析,确定出发生超时重启的设备。
48.进一步地,在本公开的一种可选实施方式中,调试缓冲区包括休眠开始内存区、休眠结束内存区、唤醒开始内存区和唤醒结束内存区。其中,休眠开始内存区(记为suspend_b_slot)用于记录休眠前的设备信息,休眠结束内存区(记为suspend_e_slot)用于记录休眠后的设备信息,唤醒开始内存区(记为resume_b_slot)用于记录唤醒前的设备信息,唤醒结束内存区(记为resume_e_slot)用于记录唤醒后的设备信息。
49.从而,本实施例中,将第一设备的第一设备名称、第一开始时间和第一结束时间写入预设的调试缓冲区,可以包括:
50.在预设函数为休眠函数的情况下,将第一设备的第一设备名称和第一开始时间写入休眠开始内存区,以及将第一设备名称和第一结束时间写入休眠结束内存区;
51.在预设函数为唤醒函数的情况下,将第一设备名称和第一开始时间写入唤醒开始内存区,以及将第一设备名称和第一结束时间写入唤醒结束内存区。
52.也就是说,本公开实施例中,在休眠或唤醒过程中,休眠一个设备时,在获取到调用该设备的休眠函数时的第一开始时间之后,将该设备的设备名称以及第一开始时间写入休眠开始内存区,在获取到调用该设备的休眠函数结束时的第一结束时间之后,将该设备的设备名称以及第一结束时间写入休眠结束内存区。同理,在唤醒一个设备时,在获取到调用该设备的唤醒函数时的第一开始时间之后,将该设备的设备名称以及第一开始时间写入唤醒开始内存区,在获取到调用该设备的唤醒函数结束时的第一结束时间之后,将该设备的设备名称以及第一结束时间写入唤醒结束内存区。由此,能够将唤醒流程的设备信息与休眠流程的设备信息分开记录,为后续依据调试缓冲区中记录的信息分析设备在休眠还是唤醒阶段发生异常提供了便利。
53.为了节省存储空间,避免不必要的信息对内存空间的占用,在本公开的一种可选实施方式中,调试缓冲区中各分区内的设备信息,会被下一个设备的设备信息覆盖,也就是说,调试缓冲区的各分区仅分别记录一条设备信息。从而,在前述实施例的基础上,所述方法还包括:
54.在获取到第二设备的第二开始时间时,将调试缓冲区的开始内存区中的第一设备名称和第一开始时间,更新为第二设备的第二设备名称和第二开始时间,其中,开始内存区包括休眠开始内存区或者唤醒开始内存区;
55.在获取到第二设备的第二结束时间时,将调试缓冲区的结束内存区中的第一设备名称和第一结束时间,更新为第二设备名称和第二结束时间,其中,结束内存区包括休眠结束内存区或者唤醒结束内存区。
56.本公开实施例中,在休眠流程中,一个设备(记为第一设备)休眠完成后,第一设备的第一设备名称和第一开始时间记录在调试缓冲区的休眠开始内存区,第一设备名称和第一结束时间记录在调试缓冲区的休眠结束内存区,并继续对下一个设备(记为第二设备)进行休眠。在休眠第二设备的过程中,获取调用第二设备的休眠函数时的系统时间作为第二开始时间,并将调试缓冲区的休眠开始内存区中记录的第一设备名称和第一开始时间,更新为第二设备的第二设备名称和第二开始时间,也即利用第二设备名称和第二开始时间覆盖休眠开始内存区中当前记录的内容,使得休眠开始内存区中仅记录当前正在休眠的第二设备的设备信息。在调用第二设备的休眠函数完成之后,获取调用第二设备的休眠函数完成时刻的系统时间作为第二结束时间,并将调试缓冲区中的第一设备名称和第一结束时间,更新为第二设备名称和第二结束时间。唤醒流程的处理过程与休眠流程类似,也是利用下一个设备的设备信息,覆盖调试缓冲区的唤醒开始/结束内存区中的已有信息,使得唤醒开始/结束内存区中仅记录当前正在唤醒的设备的设备信息,此处不再赘述。
57.在本公开实施例中,通过在获取到第二设备的第二开始时间时,将调试缓冲区的开始内存区中的第一设备名称和第一开始时间,更新为第二设备的第二设备名称和第二开始时间,以及在获取到第二设备的第二结束时间时,将调试缓冲区的结束内存区中的第一设备名称和第一结束时间,更新为第二设备名称和第二结束时间,实现了利用第二设备的相关信息覆盖调试缓冲区中第一设备的相关信息,使得调试缓冲区中仅记录当前正在休眠或唤醒的设备的信息,不仅能够节省存储空间,避免不必要的信息对内存空间的占用,还可
以在后续基于调试缓冲区中记录的信息进行分析时,避免对不必要的设备进行分析,仅分析导致休眠唤醒异常的设备即可,从而能够极大地提高异常处理效率。
58.当soc休眠唤醒成功时,可以根据系统日志记录的信息进行分析,找到设备休眠唤醒耗时长的原因,而如果soc休眠唤醒失败,比如休眠唤醒耗时较长,导致soc发生重启,则soc重启可能会使系统日志中的部分或全部信息丢失,从而无法从系统日志中找到出现异常的设备。而本公开实施例中,将休眠唤醒的设备信息记录在调试缓存区中,当soc重启时,可以从重启过程中自动抓取的系统现场快照中还原出调试缓冲区,进而根据还原出的调试缓冲区的内容进行分析,确定出导致重启的设备。因此,在本公开的一种可选实施方式中,如图2所示,在前述实施例的基础上,所述方法还包括:
59.步骤201,在监测到所述soc重启时,获取所述soc的系统快照。
60.当监测到soc重启时,比如soc因为休眠唤醒耗时较长发生超时重启,或者在休眠唤醒过程中出现其他问题导致soc重启,可以获取soc的系统快照。
61.其中,soc的系统快照是soc运行时发生意外停止,在重启过程中自动抓取的minidump文件。
62.步骤202,对所述系统快照进行解析,获得所述soc重启时的目标调试缓冲区。
63.本公开实施例中,获取了soc的系统快照之后,可以利用相关工具对系统快照进行解析,解析出soc重启时的目标调试缓冲区。
64.能够理解的是,目标调试缓冲区中记录的是soc发生重启时已写入调试缓冲区的信息,其中可能包括重启时正在休眠或唤醒的设备的名称、开始时间等,也可能包括上一个设备的名称、上一设备休眠或唤醒的结束时间。
65.步骤203,基于所述目标调试缓冲区,确定出休眠唤醒异常的目标设备。
66.本公开实施例中,从系统快照中解析出目标调试缓冲区之后,可以基于目标调试缓冲区,确定出休眠唤醒异常的目标设备。
67.具体地,对于获得的目标调试缓冲区,可以分别对目标调试缓冲区的休眠开始内存区和休眠结束内存区中记录的内容,以及对目标调试缓冲区的唤醒开始内存区和唤醒结束内存区中记录的内容进行分析,以确定是否存在休眠异常的设备或者唤醒异常的设备。
68.示例性地,对于获得的目标调试缓冲区,可以先判断是否存在空的内存区,如果休眠开始内存区和休眠结束内存区为空,则可以根据唤醒开始内存区和唤醒结束内存区记录的内容确定是否存在唤醒异常的设备;如果唤醒开始内存区和唤醒结束内存区为空,则可以根据休眠开始内存区和休眠结束内存区记录的内容确定是否存在休眠异常的设备;如果目标调试缓冲区的各内存区均不为空,则可以根据休眠开始内存区和休眠结束内存区记录的内容确定是否存在休眠异常的设备,以及根据唤醒开始内存区和唤醒结束内存区记录的内容确定是否存在唤醒异常的设备。
69.本公开实施例中,在确定休眠异常的设备和/或唤醒异常的设备时,可以采用不同的方式实现。
70.在本公开的一种可选实施方式中,基于目标调试缓冲区,确定出休眠唤醒异常的目标设备,可以包括:
71.从目标调试缓冲区的休眠开始内存区获取休眠开始时间和第三设备名称,以及从目标调试缓冲区的休眠结束内存区获取休眠结束时间;
72.若休眠开始时间大于休眠结束时间,则确定第三设备名称对应的设备为休眠异常的目标设备;和/或
73.从目标调试缓冲区的唤醒开始内存区获取唤醒开始时间和第四设备名称,以及从目标调试缓冲区的唤醒结束内存区获取唤醒结束时间;
74.若唤醒开始时间大于唤醒结束时间,则确定第四设备名称对应的设备为唤醒异常的目标设备。
75.也就是说,可以依据开始内存区和结束内存区记录的时间信息来确定是否相关设备休眠异常或唤醒异常。如果从休眠开始内存区获取的休眠开始时间大于从休眠结束内存区获取的休眠结束时间,则表明休眠开始内存区中记录的第三设备名称对应的第三设备,在休眠过程中耗时过长,还没来得及把第三设备的信息记录到休眠结束内存区中soc便发生了重启,此时休眠结束内存区中记录的是上一个休眠设备的信息,因此可以确定第三设备名称对应的第三设备为休眠异常的目标设备。同理,如果从唤醒开始内存区获取的唤醒开始时间大于从唤醒结束内存区获取的唤醒结束时间,则可以确定唤醒结束内存区中记录的是上一个唤醒设备的信息,唤醒开始内存区中记录的第四设备名称对应的第四设备,为唤醒异常的目标设备。
76.在本公开的一种可选实施方式中,基于目标调试缓冲区,确定出休眠唤醒异常的目标设备,可以包括:
77.从目标调试缓冲区的休眠开始内存区获取第一休眠设备名称,以及从目标调试缓冲区的休眠结束内存区获取第二休眠设备名称;
78.若第一休眠设备名称与第二休眠设备名称不一致,则确定第一休眠设备名称对应的设备为休眠异常的目标设备;和/或
79.从目标调试缓冲区的唤醒开始内存区获取第一唤醒设备名称,以及从目标调试缓冲区的唤醒结束内存区获取第二唤醒设备名称;
80.若第一唤醒设备名称与第二唤醒设备名称不一致,则确定第一唤醒设备名称对应的设备为唤醒异常的目标设备。
81.在soc的休眠唤醒过程中,一个设备休眠完成才会开始对下一个设备进行休眠,以及一个设备唤醒完成才会开始对下一个设备进行唤醒,因此,如果一个设备能够正常休眠或唤醒,则休眠开始内存区和休眠结束内存区中记录的设备名称应当相同,同样地,唤醒开始内存区和唤醒结束内存区中记录的设备名称也应当相同。然而,如果在设备的休眠或唤醒过程中,由于休眠或唤醒耗时较长导致soc重启,则可能由于在休眠或唤醒过程中仅来得及记录设备名称及休眠或唤醒的开始时间至休眠开始内存区或唤醒开始内存区,而休眠结束内存区或唤醒结束内存区中的信息尚未来及更新,记录的仍是上一设备的设备名称及休眠或唤醒结束时间,导致休眠开始内存区和休眠结束内存区记录的设备名称不一致,或者导致唤醒开始内存区和唤醒结束内存区记录的设备名称不一致。
82.因此,本公开实施例中,可以依据休眠开始内存区和休眠结束内存区分别记录的设备名称来判断设备是否休眠异常。具体地,可以从目标调试缓冲区的休眠开始内存区获取设备名称作为第一休眠设备名称,以及从目标调试缓冲区的休眠结束内存区获取设备名称作为第二休眠设备名称,并比较第一休眠设备名称与第二休眠设备名称是否一致,并在不一致时,将第一休眠设备名称对应的设备确定为休眠异常的目标设备。同理,可以依据唤
醒开始内存区和唤醒结束内存区分别记录的设备名称来判断设备是否唤醒异常。如果从目标调试缓冲区的唤醒开始内存区获取的第一唤醒设备名称,与从目标调试缓冲区的唤醒结束内存区获取的第二唤醒设备名称不一致,则将第一唤醒设备名称对应的设备确定为唤醒异常的目标设备。
83.在本公开实施例中,通过在监测到soc重启时,获取soc的系统快照,并对系统快照进行解析,获得soc重启时的目标调试缓冲区,进而基于目标调试缓冲区确定出休眠唤醒异常的目标设备,由此,使得在休眠唤醒过程中发生重启时,能够依据从重启过程中自动抓取的系统快照中解析出的目标调试缓冲区,确定出休眠唤醒异常的目标设备,保证了调试手段的正常实施,解决了现有技术中soc重启使得日志信息丢失,导致无法定位异常的问题。
84.图3为本公开一实施例提供的休眠流程示意图,如图3所示,开始进入休眠流程之后,获取当前的系统时间(记为t_suspend_start)以及当前休眠的设备(在休眠流程开始时为soc中的第一个设备)的设备名称,将t_suspend_start和设备名称存入suspend_b_slot,之后调用当前休眠设备对应的休眠函数,调用休眠函数完成时,获取当前的系统时间(记为t_suspend_end)及设备名称并存入suspend_e_slot,以及计算t_suspend_end减去t_suspend_star的差值(记为t_detal_suspend),如果该差值大于预设的第一阈值,则将当前休眠设备的设备信息写入系统日志中。之后,继续对下一个设备进行休眠,重复上述流程,直至soc成功休眠或soc重启。
85.图4为本公开一实施例提供的唤醒流程示意图,如图4所示,开始进入唤醒流程之后,获取当前的系统时间(记为t_resume_start)以及当前唤醒的设备(在唤醒流程开始时为soc中的第一个设备)的设备名称,将t_resume_start和设备名称存入resume_b_slot,之后调用当前唤醒设备对应的唤醒函数,调用唤醒函数完成时,获取当前的系统时间(记为t_resume_end)及设备名称并存入resume_e_slot,以及计算t_resume_end减去t_resume_star的差值(记为t_detal_resume),如果该差值大于预设的第二阈值,则将当前唤醒的设备的设备信息写入系统日志中。之后,继续对下一个设备进行唤醒,重复上述流程,直至soc成功唤醒或soc重启。
86.通过上述图3和图4所示的方式,在调试过程中仅在系统日志中记录休眠或唤醒耗时超过预设阈值的设备的信息,不会因为调试手段本身,给休眠或唤醒流程带来负面影响,并且,将成功休眠或唤醒但超时的设备信息写入系统日志,并在调试缓冲区中通过覆盖的方式记录当前正在休眠或唤醒的设备的信息,使得无论在休眠或唤醒过程中是否发生重启,都可以分析耗时较长的设备信息,保证了调试的有效进行。
87.为了实现上述实施例,本公开还提供了一种休眠唤醒处理装置。
88.图5为本公开一实施例提供的休眠唤醒处理装置的结构示意图,该装置可以采用软件和/或硬件实现,并可集成在任意具有处理能力的电子设备上,例如电脑、车载终端等设备。
89.如图5所示,本公开实施例提供的休眠唤醒处理装置50可以包括:第一获取模块501、第二获取模块502和处理模块503,其中:
90.第一获取模块501,用于获取调用片上系统soc中第一设备的预设函数时的系统时间作为第一开始时间,其中,所述预设函数为休眠函数或唤醒函数;
91.第二获取模块502,用于获取调用所述预设函数结束时的系统时间作为第一结束
时间;
92.处理模块503,用于在所述第一结束时间与所述第一开始时间之间的差值大于预设阈值的情况下,将所述第一设备的设备信息写入系统日志中。
93.可选地,所述休眠唤醒处理装置,还包括:
94.写入模块,用于将所述第一设备的第一设备名称、所述第一开始时间和所述第一结束时间写入预设的调试缓冲区。
95.可选地,所述调试缓冲区包括休眠开始内存区、休眠结束内存区、唤醒开始内存区和唤醒结束内存区,所述写入模块,具体用于:
96.在所述预设函数为休眠函数的情况下,将所述第一设备的第一设备名称和所述第一开始时间写入所述休眠开始内存区,以及将所述第一设备名称和所述第一结束时间写入所述休眠结束内存区;
97.在所述预设函数为唤醒函数的情况下,将所述第一设备名称和所述第一开始时间写入所述唤醒开始内存区,以及将所述第一设备名称和所述第一结束时间写入所述唤醒结束内存区。
98.可选地,所述休眠唤醒处理装置,还包括:更新模块;所述更新模块用于:
99.在获取到第二设备的第二开始时间时,将所述调试缓冲区的开始内存区中的所述第一设备名称和所述第一开始时间,更新为所述第二设备的第二设备名称和所述第二开始时间,其中,所述开始内存区包括所述休眠开始内存区或者所述唤醒开始内存区;
100.在获取到第二设备的第二结束时间时,将所述调试缓冲区的结束内存区中的所述第一设备名称和所述第一结束时间,更新为所述第二设备名称和所述第二结束时间,其中,所述结束内存区包括所述休眠结束内存区或者所述唤醒结束内存区。
101.可选地,所述休眠唤醒处理装置,还包括:
102.第三获取模块,用于在监测到所述soc重启时,获取所述soc的系统快照;
103.解析模块,用于对所述系统快照进行解析,获得所述soc重启时的目标调试缓冲区;
104.确定模块,用于基于所述目标调试缓冲区,确定出休眠唤醒异常的目标设备。
105.可选地,所述确定模块,还用于:
106.从所述目标调试缓冲区的休眠开始内存区获取休眠开始时间和第三设备名称,以及从所述目标调试缓冲区的休眠结束内存区获取休眠结束时间;
107.若所述休眠开始时间大于所述休眠结束时间,则确定所述第三设备名称对应的设备为休眠异常的目标设备;和/或
108.从所述目标调试缓冲区的唤醒开始内存区获取唤醒开始时间和第四设备名称,以及从所述目标调试缓冲区的唤醒结束内存区获取唤醒结束时间;
109.若所述唤醒开始时间大于所述唤醒结束时间,则确定所述第四设备名称对应的设备为唤醒异常的目标设备。
110.可选地,所述确定模块,还用于:
111.从所述目标调试缓冲区的休眠开始内存区获取第一休眠设备名称,以及从所述目标调试缓冲区的休眠结束内存区获取第二休眠设备名称;
112.若所述第一休眠设备名称与所述第二休眠设备名称不一致,则确定所述第一休眠
设备名称对应的设备为休眠异常的目标设备;和/或
113.从所述目标调试缓冲区的唤醒开始内存区获取第一唤醒设备名称,以及从所述目标调试缓冲区的唤醒结束内存区获取第二唤醒设备名称;
114.若所述第一唤醒设备名称与所述第二唤醒设备名称不一致,则确定所述第一唤醒设备名称对应的设备为唤醒异常的目标设备。
115.本公开实施例所提供的可配置于电子设备上的休眠唤醒处理装置,可执行本公开实施例所提供的任意休眠唤醒处理方法,具备执行方法相应的功能模块和有益效果。本公开装置实施例中未详尽描述的内容可以参考本公开任意方法实施例中的描述。
116.本公开实施例还提供了一种电子设备,包括处理器和存储器;所述处理器通过调用所述存储器存储的程序或指令,用于执行如前述实施例所述休眠唤醒处理方法各实施例的步骤,为避免重复描述,在此不再赘述。
117.本公开实施例还提供了一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如前述实施例所述休眠唤醒处理方法各实施例的步骤,为避免重复描述,在此不再赘述。
118.本公开实施例还提供了一种计算机程序产品,所述计算机程序产品用于执行如前述实施例所述休眠唤醒处理方法各实施例的步骤。
119.需要说明的是,在本文中,诸如“第一”和“第二”等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个
……”
限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
120.以上所述仅是本公开的具体实施方式,使本领域技术人员能够理解或实现本公开。对这些实施例的多种修改对本领域的技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本公开的精神或范围的情况下,在其它实施例中实现。因此,本公开将不会被限制于本文所述的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1