[原创]kernel 2.6.9 成功实现休眠(STD)
实验系统一:
主机:C4 1.7GHz,Abit BD7II(Intel 845D),ST40G IDE,nVidia TNT 2 Ultra
实验系统二:
主机:P4 2.8CGHz(超线程),ONDA P5E-X(Intel 865PE),ST80G SATA,nVidia Geforce 4 MX440
系统均为:Gentoo 2004.2,gentoo-dev-sources-2.6.9-r1,使用 NPTL。
gcc version 3.3.4 20040623 (Gentoo Linux 3.3.4-r1, ssp-3.3.2-2, pie-8.7.6)
注意 swap 分区大小最好大于内存总数,我一般设为内存的两倍:)
从 http://softwaresuspend.berlios.de/download.html 下载 software-suspend-2.1-for-2.6.9.tar.bz2,解压缩到 /tmp/software-suspend-2.1-for-2.6.9/ 下。
$ cd /usr/src/linux
$ /tmp/software-suspend-2.1-for-2.6.9/apply
Applying 201-ati-agp ...
Applying 202-ne2k ...
Applying 204-frame-buffer-class-support ...
.
.
.
Applying 830-blockwriter ...
Applying 831-swapwriter ...
Applying 832-checksumming ...
All happy!
$ make menuconfig
设置好其他选项,最好把 USB 等 hotplug 的支持选项设为<M> 模块,原因见下。
进入 Power management options (ACPI, APM)--->
里面多了一项:Software Suspend 2--->
进入,│ │ <*> Software Suspend 2 │ │
│ │ --- Image Storage (you need at least one writer) │ │
│ │ <*> Swap Writer │ │
│ │ --- Page Transformers │ │
│ │ <*> LZF image compression <--推荐压缩模式 │ │
│ │ < > GZIP image Compression │ │
│ │ --- User Interface Options │ │
│ │ <*> Text mode console support │ │
│ │ --- General Options │ │
│ │ [ ] Relaxed /proc/software_suspend permissions │ │
│ │ () Default resume device name │ │
│ │ [ ] Allow Keep Image Mode │ │
│ │ --- Debugging │ │
│ │ [ ] Compile in debugging output │ │
│ │ < > Compile checksum module │ │
“Text mode console support”可以显示一个休眠进度指示条的文本模式的“splash”,可选。
保存,编译 $ make
$ su
# make modules_install
# cp arch/i386/boot/bzImage /boot/kernel-2.6.9-gentoo-r1.nptl
修改启动命令行,加入参数“resume2=swap:/dev/hdax”(hdax是swap分区),我的是GRUB:# vi /boot/grub/menu.lst
timeout 6
default 0
title Gentoo GNU/Linux (2.6.9-gentoo-r1.nptl)
root (hd0,0)
kernel /kernel-2.6.9-gentoo-r1.nptl root=/dev/hda2 resume2=swap:/dev/hda4 video=vesafb:mtrr,1024x768-16 vga=0x317
在实验系统二中是 kernel /kernel-2.6.9-gentoo-r1smp.nptl root=/dev/sda2 resume2=swap:/dev/sda3 video=vesafb:mtrr,1024x768-16 vga=0x317
保存,重新启动系统……
登录,切换到 root 用户,试一下: # sync && echo > /proc/software_suspend/activate
#
为安全起见,在休眠之前先执行 sync 同步一下硬盘:)
呵呵呵,硬盘灯一阵红红,键盘上的指示灯闪亮三次,然后,一切归于平静了~~
再开机,稍作等待…… 出现提示符 # sync && echo > /proc/software_suspend/activate
#
跟休眠前一模一样!(启用了 Text mode console support 的话会清屏)大功告成!
下载页上还有一个 hibernate,是一组命令行下运行的脚本,可以更好更安全地帮你做一些休眠之前的准备工作。极力推荐!
下载 hibernate-script-0.99.tar.gz , # tar -zxvf hibernate-script-0.99.tar.gz
# cd hibernate-script-0.99
# ./install.sh
Installing hibernate script to /usr/local/sbin/hibernate ...
Installing configuration files to /etc/hibernate ...
Installing scriptlets to /usr/local/share/hibernate/scriptlets.d ...
Installing man pages to /usr/local/man ...
Setting permissions on installed files ...
Installed.
Edit /etc/hibernate/hibernate.conf to taste, and see hibernate -h for help.
有必要的话编辑 /etc/hibernate/hibernate.conf,以 root 用户执行 /usr/local/sbin/hibernate 即可进入休眠了哦:) 更多的参数见 hibernate -h,感觉比较有用的是 UnloadModules 和 LoadModules auto 两个选项,可以在休眠之前 unload USB 等 hotplug 相关模块,唤醒后再加载,可以省却很多麻烦。
我的实验系统一没有装 X。
实验系统二,在启用 X 的时候,开始出了点问题…… 反复尝试、总结如下:
在 X 下休眠,无论是在 X 终端中还是<Ctrl>+<Alt>_<Fn>切换到控制台后使用命令行:
* 使用 echo > /proc/software_suspend/activate 的方式,会直接挂掉;使用 /usr/local/sbin/hibernate 脚本成功休眠;
* 使用 nvidia 的驱动,唤醒后会挂掉;使用 Xorg 自带的 nv 驱动成功;
* 最好 su 切换到 root 后执行 /usr/local/sbin/hibernate, 直接 sudo 的话唤醒后有时会不正常。
需要修改 /etc/hibernate/hibernate.conf 的情况:
* 如果你像我一样喜欢用 postfix,需要修改/etc/hibernate/hibernate.conf,加上 RestartServices postfix,否则唤醒后 postfix 会不正常;
* 使用 hotplug 设备的,需要加上 UnloadBlacklistedModules yes 和 LoadModules auto 两个选项。/etc/hibernate/blacklisted-modules 里面列出了与 software_suspend 不能很好配合的模块(第一个就是 nvidia);
* 如果使用 nvidia 驱动,需要加上 LeaveXBeforeSuspend yes 和 nVidiaHack yes 两个选项,以便在休眠前退出 X (没办法的办法?)。
software_suspend 支持 SMP 机器的休眠,支持 SATA,如我的实验系统二。
我自己的机器使用的是 Adaptec AIC-7899A U160/m SCSI 控制卡,现在还无法实现休眠:( 看中.................... 唉,刚刚想试验一下装上 X 后会啥样,人家就来把机器搬走了……
俺自己的跟LP的机器都没有 IDE 硬盘,偏偏 SCSI 在 Linux 下还不能 STD ……
in /var/log/message:
Oct 24 09:36:51 kitty Software Suspend 2.1: Stopping tasks failed.
Oct 24 09:36:51 kitty Tasks that refused to be refrigerated and haven't since exited:
Oct 24 09:36:51 kitty - ahc_dv_0 (#170) signalled but didn't enter refrigerator.
Oct 24 09:36:51 kitty ahc_dv_0 R running 0 170 1 176 169 (L-TLB)
Oct 24 09:36:51 kitty - ahc_dv_1 (#177) signalled but didn't enter refrigerator.
Oct 24 09:36:51 kitty ahc_dv_1 S 0001DA19 0 177 1 340 176 (L-TLB)
Oct 24 09:36:51 kitty c0449c88 0000000a 00000046 0001da19 c120df60 00000001 c012a85f cfd01f6c
Oct 24 09:36:51 kitty c011db33 00000001 c120df60 cfd01f4c cfd01f4c 00000246 00000001 c0449c88
Oct 24 09:36:51 kitty cffc18d0 cfd00000 cffc18c4 00000246 cfd01f8c c011dfe7 cffc18cc 00000003
Oct 24 09:36:51 kitty Call Trace:
Oct 24 09:36:51 kitty [<c012a85f>] run_timer_softirq+0xff/0x1a0
Oct 24 09:36:51 kitty [<c011db33>] scheduler_tick+0x123/0x4c0
Oct 24 09:36:51 kitty [<c0348fa3>] _spin_lock_irqsave+0x3/0x30
Oct 24 09:36:51 kitty [<c03490d5>] _spin_unlock_irqrestore+0x5/0x20
Oct 24 09:36:51 kitty [<c0107cfa>] apic_timer_interrupt+0x1a/0x20
Oct 24 09:36:51 kitty [<c011dfe7>] __wake_up_locked+0x27/0x30
Oct 24 09:36:51 kitty [<c034779b>] __down_interruptible+0x4b/0x120
Oct 24 09:36:51 kitty [<c011ded0>] default_wake_function+0x0/0x20
Oct 24 09:36:51 kitty [<c0347883>] __down_failed_interruptible+0x7/0xc
Oct 24 09:36:51 kitty [<c029c5a4>] .text.lock.aic7xxx_osm+0x2d/0x99
Oct 24 09:36:51 kitty [<c0297e60>] ahc_linux_dv_thread+0x0/0x220
Oct 24 09:36:51 kitty [<c01052d5>] kernel_thread_helper+0x5/0x10
Oct 24 09:36:51 kitty Please include the following information in bug reports:
Oct 24 09:36:51 kitty - SUSPEND core : 2.1
Oct 24 09:36:51 kitty - Kernel Version : 2.6.9-r1smp.nptl
Oct 24 09:36:51 kitty - Compiler vers. : 3.3
Oct 24 09:36:51 kitty - Modules loaded : rtc usbcore 3c59x sg
Oct 24 09:36:51 kitty - Attempt number : 1
Oct 24 09:36:51 kitty - Parameters : 17 0 0 2048
Oct 24 09:36:51 kitty - Limits : 65520 pages RAM. Initial boot: 62436.
Oct 24 09:36:51 kitty - Overall expected compression percentage: 0.
Oct 24 09:36:51 kitty - LZF Compressor enabled.
Oct 24 09:36:51 kitty - Swapwriter active.
Oct 24 09:36:51 kitty Swap available for image: 66266 pages.
Oct 24 09:36:51 kitty - Preemptive kernel.
Oct 24 09:36:51 kitty - SMP kernel.
Windows下倒是可以的。
期待中…… 我今天尝试了STR,结果发现在文字模式STR非常好,但如果在X界面STR的话,重新开机就死翘,连键盘都死锁 反正没有笔记本用,台式机偶从来都不敢 STR :mrgreen: 我启动了X后,CTRL+ALT+F1回到控制台,STR后重新开机,一切正常,照样可以输入执行命令,但如果CTRL+ALT+F6切换回X画面,立即就死翘翘
看来STR支持还不是很好,否则就爽呆了 偶成功了,在 X 下休眠,不过不能使用 nvidia 的驱动!
马上修正顶贴:) 干脆连STR也试试行不行 apmsleep +`date +%H:%M` 我用acpi的...
APM好像不支持STR吧? 天晓得,反正在我的slackware 10上打那个命令是可以休眠的,而且在X下也一样好好的。 顶一下,继续关注。不过linux的发展的确是比较缓慢哦,休眠都不支持~ 天晓得,反正在我的slackware 10上打那个命令是可以休眠的,而且在X下也一样好好的。
我现在怀疑是nvidia驱动的原因,我回去试试换成自带的nv驱动试验一下,如果真的是驱动原因我再找找新版本驱动,我现在用的还是5336版本
页:
[1]