公司要用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内核配置中怎么也找不到关这一项的选项。

解决方案 »

  1.   

    settings-->Applications-->Development-->Stay awake
    可以设不自动刮起的 ,不用编内核
      

  2.   

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

  3.   

    哦这样,我没有研究过suspend底层,无法提供精准的文件位置信息,但是从你的分析来看,应该是正确的,good luck 不过,我仍然不理解你所说的:Android启动以后为了节省电力,总是运行几十秒就会suspend。
    你的意思是,你确定你种情况的suspend的命令发起人是Android 系统框架层么 
      

  4.   

    你确定你种情况的suspend的命令发起人是Android 系统框架层么?
    我刚才想了一下,应该是Android框架发起,Linux中一般只管操作,不管策略。我刚才又找了一下,总算找到了。
    kernel_imx\arch\arm\Kconfig...........
    config ARCH_SUSPEND_POSSIBLE
    def_bool y
    ............因为这里默认设成了y,所以在make menuconfig一直没找到。
      

  5.   

    Android正常启动后,默认情况下(没有人为修改),会30S(大概是30,我总是调至never timeout所以记忆不深了)自动suspend 。
    如果你关掉CONFIG_ARCH_SUSPEND_POSSIBLE,还能编译过去么?
    我觉得应该关掉的是ARCH对Android SYSPEND信号的响应,直接修改pm_suspend
      

  6.   


    这样内核能编过 Android可过?它从平台读不到suspend数据了
      

  7.   

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

  8.   


    我也只是确定make kernel没问题 但是m后 板子跑起来 不确定是不是会 unexpected ...force shut down 
      

  9.   

    期待你的结果,我也正好学习一下suspend ,一定要及时告诉我声,要不我心里痒痒
      

  10.   

    Suspending console(s) (use no_console_suspend to debug)
    把我解决suspend console的方法也发上来吧,注意这个不是错误,属于正常操作。在boot cmdline中增加no_console_suspend.就可以了。
    有可能需要选上Always use the default kernel command string 
    我这是要选的。
      

  11.   

    我发现这个你看看吧,http://blog.csdn.net/zhenwenxian/archive/2010/10/27/5968292.aspx
      

  12.   

    楼主,我也是遇到这个问题...但我这样的 settings-->Applications-->Development-->Stay awake 然后就不会 你那种办法 能详细点么 ?
      

  13.   

    应用程序或者用户通过写/sys/power/state文件就可以改变系统睡眠状态。
    可以考虑在/kernel/kernel/power/main.c中,将state_store改给为do{}while(0),这样内核就不会理会上层提出的睡眠要求了