suspend linux(Linux修改时间)
这篇文章给大家聊聊关于suspend linux,以及Linux修改时间对应的知识点,希望对各位有所帮助,不要忘了收藏本站哦。
linux suspend命令详解
suspend命令是linux下的一个命令,它主要有一个功能,具体介绍如下:
suspend命令属于终端的内建命令,能够用来暂停目前正在执行的shell。
说明:如果需要恢复的话,必须要用SIGCONT信息。
suspend命令的具体命令的语法格式为suspend[参数]。
参数:
-f若目前执行的shell为登入的shell,那么suspend预设无法暂停此shell
参考范例:
如果暂停终端,则具体命令为:
[root@linuxcool~]# suspend-f
拓展:
常用的linux命令有哪些?
常用的linux命令一般可以分为很多种,比如查看硬件信息相关命令就有8个,分别是ifconfig、free、fdisk、ethtool、mii-tool、dmidecode、dmesg、lspci,用于系统性能监视高级命令有uptime、top、free、vmstat、mpstat、iostat、sar、chkconfig,用于内存的命令是top、free、vmstat、mpstat、iostat、sar等。
如何在终端中使用suspend命令暂停并恢复正在执行的shell
在Linux终端中,"suspend"命令是一个内置工具,它的主要作用是临时中止当前的shell进程。当你需要暂时离开并稍后返回时,这个命令就非常有用。当你想要恢复被暂停的shell,只需发送SIGCONT信号即可。以下是关于该命令的详细说明:
命令格式很简单,基本形式为 sudo suspend [参数]。
其中一个值得注意的参数是-f,这个选项在执行时会进行检查。如果当前运行的shell是登录shell,那么默认情况下,suspend命令将无法暂停它。这主要是为了保证系统的安全性和稳定性。
具体操作的一个实例是,当你在终端中输入 [root@linuxcool~]# suspend-f,这将暂停当前的shell进程,直到你发送SIGCONT信号来恢复它。
总之,suspend命令为终端用户提供了暂停和恢复shell执行的能力,只需了解其基本语法和特殊参数,就能有效地管理和控制你的shell环境。
如何在Android 或Linux 下,做Suspend /Resume 的Debug
在Linux或Android下,做power management的调适时,常遇到没有足够的information,可以做为debug时的依据和参考
我们整理了几个常用的参数或Command,可供设计者,得到足够的Informaiton做Suspend/ Resume的function Debug。
加boot参数 no_console_suspend
基本上我们常常使用console做为suspend function的debug的Information source,但原始的source code在suspend过程中,会将console关掉。所以我们看到一定程度後就再也看不到message了。
但是我们并不知道在Suspend的过程中,系统到底发生了什麼事,可能造成无法suspend。
为此,我们就会在kernel启动参数中加上no_console_suspend这个参数。在AM/DM37x APM中是修改boot.scr档案参数
#!/bin/sh
cat<<EOF> boot.cmd
if fatload mmc 0 82000000 uImage
then
echo***** Kernel:/dev/mmcblk0p1/uImage*****
fi
echo***** RootFS:/dev/mmcblk0p2*****
# Pantherboard DVI output
#setenv bootargs'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=dvi vram=32M omapfb.mode=dvi:1280x720MR-32 omapfb.vram=0:16M mpurate=1000'
# Pantherboard LCD output
setenv bootargs'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000'
将no_console_suspend加上去到boot参数後就好了
setenv bootargs'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000 no_console_suspend'
如果是OMAP4 APM的话,请修改Kernel参数的所在档案即可(在U-boot Source code中)
这个是基本的参数,所以在Android或Linux上都可以使用。 kernel把console suspend掉以後,不管里面出了什麼事情,在Console上都看不到。而使用这个参数後,大部分在suspend/resume时候的死机都可以通过Console看到kernel Panic的信息,这样我们才会知道是哪里出了问题。因为有的时候resume出错,或者suspend到很後面出错的console不加这个参数都看不到。
但这个参数在TI OMAP3/OMAP4/AM37x/DM37x有可能造成有时Suspend完当掉或是resume失败的问题,假如已经抓到问题在那的时候,您就可以将这个参数Disable,不然很可能就会Debug不下去。
initcall_debug
这个同样kernel参数,使用的时机是,当我们不知道是那个driver在suspend/resume过程中出错的时候,可以使用这个参数来找出问题所在。在下完这个参数後,Kernel在suspend时,会将每个driver或task的状况report出来。我们可以藉由这些information,Check在suspend时,每个task和driver是否已经完成进suspend的相关准备工作…
打开这个参数的方法有二种
一种是在console下Command,启动这个function…
echo 1>/sys/module/kernel/parameters/initcall_debug
echo 9>/proc/sys/kernel/printk
其中上面的第一条命令是打开initcall_debug,这个是所有的kernel都会有的。
而第二条命令是要提高kernel message级别,因为initcall的这些信息都是KERN_DEBUG级别的,所以需要提高printk的级别才可以看到,要不然suspend/resume的时候挂了,你就没有机会看到这些信息了。
另一种启动方法是写在kernel的启动参数下,就可以了。
setenv bootargs'console=ttyO2,115200n8 androidboot.console=ttyO2 mem=512M root=/dev/mmcblk0p2 rw rootfstype=ext3 rootdelay=1 init=/init ip=off omap_vout.vid1_static_vrfb_alloc=y omapdss.def_disp=lcd omapfb.mode=lcd:800x480MR-32 vram=8M omapfb.vram=0:8M mpurate=1000 initcall_debug no_console_suspend'
同样的,这个参数也有可能造成AM37x/DM37x/OMAP4 APM发生进suspend当掉的问题。所以一旦知道问题所在,麻烦请将这个参数Disable掉。
suspend_test
这个方法可以用rtc这种软件的方式来做循环的suspend/resume,尽管对於Android这样并不是很足够,(还要再模拟一个POWER_KEY上去才够),但是对於测试Driver的稳定性,还是有一定用处的。不要认为suspend了几次可以,那麼就可以通过几千次的测试。这个suspend是5秒钟用RTC唤醒,然後回到Android後5秒钟又会自动睡下去,但是对於通用Linux,你可以写个script来让他起来一会再睡下去,或许这个工具比较有用rtcwakeup(google rtcwakeup)。
使用方法:
编译一个有这个功能的kernel, make menuconfig以後选上
CONFIG_PM_DEBUG=y
CONFIG_PM_TEST_SUSPEND=y
这两个选项,烧写新的kernel,然後打开你需要测试的Device,比如WIFI,3G
echo"core">/sys/power/pm_test
echo"mem">/sys/power/state
这样,它就会循环休眠和唤醒了。
wakelock
Android和Linux在Power Management相关的最大的就是wakelock机制的有无。Android有时候会碰到suspend进不去,或者suspend到最後又莫名奇妙的wake up的问题。这些都有可能是wakelock引起的,或者说是wakelock的使用者引起的。怎麼fine tune呢,使用Console在Android系统下设定:
echo 15>/sys/module/wakelock/parameters/debug_mask
echo 15>/sys/module/userwakelock/parameters/debug_mask
15是代表16进制的F,在wakelock里面就是把所有的debug信息打开,起码现在是这样设定的。如果以後不够用了,可能就会改成255.
这样你能看到kernel和frameworks层对於wakelock的操作、申请及释放。这样看申请和释放成对否就可以了。
注意: wakelock有一种是timeout的,就是说多少毫秒以後,会自动释放,对於这些wakelock,申请和释放可能是不成对的。
power.0
有时看到系统suspend到了最後,然後遇到power.0後suspend失败,然後整个系统又resume回来。这个是android专有的,因为power.0是android注册到suspend最後的一个行程,它会在CPU进入suspend之前检查一下有没有wakelock存在,如果这时候还有没有释放的wakelock,那麼它会return-EBUSY然後导致整个suspend失败。 Check这个问题的方法就是把上面wakelock的debug信息打开,然後看看是哪个去申请了wakelock,然後Release它。
这个错误的错误信息大概是这样的:
pm_noirq_op(): platform_pm_suspend_noirq+0x0/0x38 returns-11
PM: Device power.0 failed to suspend late: error-11
earlysuspend
在android里面中另外一个和Power Management有相关的机制叫earlysuspend,同样可以打开debug message,用来做Android earlysuspend debug之用:
echo 15>/sys/module/earlysuspend/parameters/debug_mask
来把相关的debug信息印出来,例如那个earlysuspend要被call之类的。
suspend/resume时间 fine tune
有的时候你要调试suspend/resume的时间太慢的问题。一种方法是用initcall_debug,然後把printk的时间戳打上,然後看那个process最慢,再来Check原因是什麼
我有一个patch,专门用来调试这个问题的,但是upstream不接受,说非要用这种折磨人的方法才行,但是如果你想用可以下下来打上去用一下。
地址在这里:
用法是,打上这个PATCH以後,在KERNEL里面选择上PM_DEBUG, SUSPEND_DEVICE_TIME_DEBUG这两个选项。
然後
echo微秒>/sys/power/device_suspend_time_threshold
比如
echo 50000>/sys/power/device_suspend_time_threshold
注意这里是微秒哦。。。它会把在suspend/resume的时候慢的那些driver打出来,然後你去干掉它。。