当前位置: 代码迷 >> Android >> 关于Android Suspend有关问题
  详细解决方案

关于Android Suspend有关问题

热度:51   发布时间:2016-05-01 12:37:01.0
关于Android Suspend问题
公司要用Android做个项目,送出打的板已经回来,可板子上除了arm,电源管理, nand,uart外就没有什么其它东西管用,现在让我先想办法将系统启动起来,调其它模块,看是什么地方出了错。经过努力系统已经能跑,但现有个问题,就是Android启动以后为了节省电力,总是运行几十秒就会suspend,现在我想将Android的suspend功能关掉应该怎么办,是从Android着手,还是从Linux上着手。
以下是抓的信息
request_suspend_state: mem (0->3) at 76849934440 (1970-01-01 00:01:21.803858688 UTC)

PM: Syncing filesystems ... done.

Freezing user space processes ... (elapsed 0.01 seconds) done.

Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.

Suspending console(s) (use no_console_suspend to debug)(suspend console的问题已经解决,但系统还是会进入suspend状态)
我尝试了配Linux内核电源管理模块,但配过以后,就编译不过了。
以下是我的Linux中跟suspend相关的配置
CONFIG_SUSPEND_NVS=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
CONFIG_HAS_EARLYSUSPEND=y
CONFIG_EARLYSUSPEND=y
# CONFIG_CONSOLE_EARLYSUSPEND is not set
CONFIG_FB_EARLYSUSPEND=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_USB_SUSPEND=y

通过配置信息,我感觉CONFIG_ARCH_SUSPEND_POSSIBLE=y这个可能会有用,但在Linux内核配置中怎么也找不到关这一项的选项。


------最佳解决方案--------------------
display->timeout :never 
------其他解决方案--------------------
settings-->Applications-->Development-->Stay awake
可以设不自动刮起的 ,不用编内核
------其他解决方案--------------------
楼上两位给的可能是从上层关的方法,现在问题是我的LCD和touch screen都不能用,我只有从Linux或Android中间层来想办法,然后从新编译,我刚才又看了/kernel/kernel/power/下的文件,感觉应该是Apm-emulation.c中建了一个设备节点,然后应用层,也就是Android的中间层通过ioctl调用,最终通过调用pm_suspend函数->与设备相关的电源管理实现的suspen,我再找找看能不能关掉CONFIG_ARCH_SUSPEND_POSSIBLE,如果不行,我只有改一下pm_suspend了。
------其他解决方案--------------------
引用:
楼上两位给的可能是从上层关的方法,现在问题是我的LCD和touch screen都不能用,我只有从Linux或Android中间层来想办法,然后从新编译,我刚才又看了/kernel/kernel/power/下的文件,感觉应该是Apm-emulation.c中建了一个设备节点,然后应用层,也就是Android的中间层通过ioctl调用,最终通过调用pm_suspend函数->与设备相关的电源管理实……

哦这样,我没有研究过suspend底层,无法提供精准的文件位置信息,但是从你的分析来看,应该是正确的,good luck 

不过,我仍然不理解你所说的:Android启动以后为了节省电力,总是运行几十秒就会suspend。
你的意思是,你确定你种情况的suspend的命令发起人是Android 系统框架层么 
------其他解决方案--------------------
你确定你种情况的suspend的命令发起人是Android 系统框架层么?
我刚才想了一下,应该是Android框架发起,Linux中一般只管操作,不管策略。

我刚才又找了一下,总算找到了。
kernel_imx\arch\arm\Kconfig

...........
config ARCH_SUSPEND_POSSIBLE
def_bool y
............

因为这里默认设成了y,所以在make menuconfig一直没找到。
------其他解决方案--------------------
Android正常启动后,默认情况下(没有人为修改),会30S(大概是30,我总是调至never timeout所以记忆不深了)自动suspend 。
如果你关掉CONFIG_ARCH_SUSPEND_POSSIBLE,还能编译过去么?
我觉得应该关掉的是ARCH对Android SYSPEND信号的响应,直接修改pm_suspend
------其他解决方案--------------------
引用:
你确定你种情况的suspend的命令发起人是Android 系统框架层么?
我刚才想了一下,应该是Android框架发起,Linux中一般只管操作,不管策略。

我刚才又找了一下,总算找到了。
kernel_imx\arch\arm\Kconfig

...........
config ARCH_SUSPEND_POSSIBLE
def_bool y
............
……


这样内核能编过 Android可过?它从平台读不到suspend数据了
------其他解决方案--------------------
这样内核能编过 Android可过?它从平台读不到suspend数据了?

Linux编译和Android编译是两个过程,分别编译它们绝对没问题,应该担心运行的时候读不到数据,不过我猜Android中一定设定了读不到suspen数据的错误,毕竟Android是一个通用平台,不过这些只是猜测,只能等下个星期我去公司测了以后,才能确定。
  相关解决方案