|
2007-06-06 02:31
在写这篇文章之前,本人已经花费了N天的时间去研究这个看似简单的问题。在我拔开乌云看见太阳的时候,我却没有感到应有的喜悦。中国的计算机发展实在是落后了国外N年,在技术核心都掌握在外国人手里的今天和将来,这个差距还会越拉越大,缺乏技术支持的我们,可能会浪费更多的时间去研究一个很简单的问题,这将是国人的悲哀。
如果你想知道最后的解决方案,请跳过后面的一些段落,直接翻到结尾。有些过程虽然没什么用,但我仍然固执地将其记录下来,以见证这么多天我究竟付出了多少努力。
现在MCE越来越流行了,MCE2005我虽然没将过,但是肯定希望买到一款能够跟其兼容的电视卡。所以就花重金(820,比媒体报价还贵,本地JS太黑心)买了一片丽台的winfast PVR3000 Deluxe,主要是其支持硬件mpeg2压缩,可以边录节目边工作,不占CPU,后来经使用,也是爽得要命。在安装过程中,有一些小问题,都通过安装最新驱动,和应用软件解决了,但就是suspend to ram(s3)问题,一直到最后才搞定。
总先我们来扫扫肓,什么是S3呢,这个就跟ACPI有关系了。
以下是在互联网上搜到的关于ACPI 5段的解释:
ACPI电源管理
ACPI就是AdvancedConfigurationandPowerInterface的缩写,意思是“高级配置与电源接口”。这是英特尔、微软和东芝共同开发的一种电源管理标准。
在ACPI电源管理方式下,根据CPU、内存、二级缓存、主控芯片、硬盘等设备挂起时所处的状态不同,它可以支持五种睡眠状态S1、S2、S3、S4和S5。?
S0--正常,即正常的工作状态,所有设备全开,功耗一般会超过80W;
S1--CPU停止工作,也称为POS(PoweronSuspend),这时除了通过CPU时钟控制器将CPU关闭之外,其他的部件仍然正常工作,这时的功耗一般在30W以下;(有些CPU降温软件就是利用这种工作原理)
S2--CPU关闭,这时CPU处于停止运作状态,总线时钟也被关闭,但其余的设备仍然运转;
S3--除了内存外的部件都停止工作(standby),即STR(SuspendtoRAM:挂起到内存),这时的功耗不超过10W;
S4--内存信息写入硬盘(hibernation),所有部件停止工作,也称为STD(SuspendtoDisk),这时系统主电源关闭,但是硬盘仍然带电并可以被唤醒;
S5--关闭,所有设备全部关闭(包含电源),功耗为0。
看完上面的解释,大家一定可以看出S3确实是一个实用的功能(以前俺居然很少用,主要用S4).国外的权威网上上,结出的定义就更诱人,Power < 5 W 。如果大家不用电脑的时候,都能够使用S3待机,全国得省下多少电呀(ACPI发展的原因,就是美国西部城市缺电,老外也是知道节省的)。想到前段时间的,全国QQ挂级,老外一定以为中国真的是物质级大丰富,人民为所欲为了。
另外,S3还有一个与S1同样的好处,就是启动快,微软为优化后的系统启动时间做了严格的定义,S5的启动时间是30秒,S4是20秒,S3是5秒(这里的启动完成,是指可以占击桌面图标,并执行程序)。拥有节能节时等多方面优点的S3,无愧为ACPI中的王者,也是N年前各大主板厂商炒作的噱头。听说新出的,80%以上的主板都不支持了,只有一些高端才支持,不知道是不是因为其技术复杂,实现成本太高的缘故。
现在说说,为什么我想用S3,第一,我想把电脑改装成HDPC,首先想要启动快,如果和电视一样快当然好,不过XP的正常启动实在太慢了,所以只能先用S1和S3.第二,电费现在居高不下,24X7的开着电脑,那不破产才怪(有些人说,不看可以不开呀,我是指我想在我不在的时候录节目,花重金买的电视卡,当然不想错过任何精采的瞬间了)。这样,S3就是不二的选择了。
下面就要进入正题了,真不好意思让大家看了许多的废话,本人已经不说废话好多年了,请允许我破一次戒吧
首先大家要在bios里设置,在power里有一个suspend state的项目,如果你买的是华硕的p4p800SE主板,默认是auto,也就是S3,我装过的几台,都不用做任何改动待机就可以正常STR,当然前题条件是你装的是非克隆的版本。如果你像我一样,买的是intel主板,那就恭喜你中奖了。现在跟着我,在心里大声喊出:FUCK U MAMA,INTEL(不小心出声可别把同事吓坏了)。INTEL主板这里只有2个选项,S1,和S3,默认是S1.当你在这里,把S1改成S3,保存并重启后,在XP下点待机,你会发现,并和原来没有任何区别。怎么区别S3有没有启动呢,最简单的是在待机模工下,查看电源风扇,电源风扇不转,机器跟关机没什么两样(华硕是电源灯会闪烁,INTEL是全灭,但键盘和鼠标亮着),但是我试了几次,都发现电源风扇和CPU风扇都还是在转着。于是,就开始了我的S3寻梦之旅。
先用google一下,再baidu一下,发现国内关于主板的不能启动S3的解释都还在启蒙阶段,有的说“S3用着用着,突然哪天就不能用了”,有些说,机器装的2003不能S3待机,XP可以进入S3待机,都没有一个明确的解释和解答。
于发,我开始凭着仅有的几个关键字,和扔了N年的GRE,托福和英语6级的底子(现在估计4级都到不了了),在google英文的海洋里狗刨着。首先得到一个最简单的答案:重装系统。老外的解释是:S3状态能不能用,是在安装系统的时候决定的,系统装好以后再改就无效了。也就是让你先在bios里,把suspend state的状态改成S3,再装系统。我靠,要是只能这么解决,我只能说Bill Gates 拿大家当SB了。为了不当SB,我坚持不重装系统,为了我N多的盗版与正版软件,坚持不重装系统,为了这么多年来,没有重装过系统没有中过病毒纪录不被打破,坚持不重装系统。
又经过在新闻组里N小时的翻阅,一个专业点的老外蹦了出来,他说:ftp://ftp.microsoft.com/Products/Oemtest/v1.1/WOSTest/Tools/Acpi/dumppo.exe
可以用这个软件改系统,可以让其支持S3待机。妈呀,真是大救星呀,赶快下载下来看看。结果半天没下载下来,重播了一次号才下载下来,奶奶的,原来之前被微软FTP给封了IP了,老子可是大大的良民啊。
先查查机器的状态:
D:/tools>DUMPPO.EXE admin
Admin policy overrides
Min sleep state......: S1
Max sleep state......: S4 - hibernate
Min video timeout....: 0
Max video timeout....: -1
Min spindown timeout.: 0
Max spindown timeout.: -1
D:/tools>DUMPPO.EXE cap
power capabilties
System power capabilties
Power Button Present....: TRUE
Sleep Button Present....: TRUE
Lid Present.............: FALSE
System states supported.: S1 S3 S4 S5
Hiber file reserved.....: TRUE
Thermal control.........: FALSE
CPU Throttle control....: FALSE
Processor min throttle..: 100
Processor trottle scale.: 100 (1%)
Some disk will spindown.: TRUE
System batteries present: FALSE
System batteries scale..: (G:0 C:0) (G:0 C:0) (G:0 C:
Ac on line wake ability.: Unspecified
Lid wake ability........: Unspecified
RTC wake ability........: S4 - hibernate
Min device wake.........: Unspecified
Default low latency wake: Unspecified
这里明明显示支持S3呀。
D:/tools>DUMPPO.EXE ac
AC power policy
Power button.........: Sleep(QueryApps|UIAllowed)
Sleep button.........: Sleep(QueryApps|UIAllowed)
Lid close............: Disabled Sleep(QueryApps)
Lid open wake........: Working
Idle.................: Sleep(QueryApps)
Settings.............: Timeout=1800, Sensitivity=50
Min sleep state......: S1
Max sleep state......: S1
Reduced latency.sleep: S1
WinLogonFlags........: 0
Doze S4 timeout......: 0
Battery broadcast res: 3
Battery discharge 0..: No battery, but enable is set
Battery discharge 1..: No battery, but enable is set
Battery discharge 2..: Disabled
Battery discharge 3..: Disabled
Video timeout.......: 0
Hard disk timeout....: 1200
Optimize for power...: FALSE
Fan throttle toler...: 100
Forced throttle......: 100% (off)
Min throttle.........: 0%
Over throttle act....: Sleep(OverrideApps|DisableWakes|Critical)
问题出在这个交流电源的配置上面,maxsleep 是 S1,也就是系统支持S3,但配置是S1,难道真是让第一个老外说中了,配置是在系统安装的时候就已经先天决定了,不能后天改变吗?
想去查一下,dumppo.exe的使用方法,结果无功而返,就连N多老外,也都对这个小程序的语法不能确定,语意中多是try,no cencert之类的。但还是查到了一些资料。这个文件源自DDK,是微软提供给厂家测试硬件驱动对ACPI的支持用的,也就是所谓的OEMTEST。于是,以迅雷不及眼耳盗铃之势把微软最新的DDK下载回来,安装上以后那个失望。dumppo.exe居然已经从DDK里淘汰掉了,转而换成了sleeper.exe,微软的文档大概是这么解释的:dumppo.exe,只能强制修改状态,当有硬件或驱动不直持S3的时候,系统本应该转到能被其支持的最小的状态即S1,而被强制修改过以后,会导致很多不可预知的错误。看来想找到dumppo.exe的文档算是没戏了。
这里先说一下老外的研究成果,虽然不是最佳的方法,但是确实一个有效的方法。
Enter dumppo admin minsleep=S3 to force Windows to always use S3 when entering standby
另一个人的方法是:DUMPPO.EXE admin /ac minsleep=s3
这里,有些人说有效果,有些人说重启以后又还原了
现在我猜想,可能改完以后需要马上重启,不然注册表的键值有可能在某种保护的程序的作用下被还原。
下面是另2位仁兄,发现的注册表被创建的键值:
So I think it maybe is the following value:
S1
HKLM/SYSTEM/CURRENTCONTROLSET/Control/Session Manager/Power/PolicyOverrides SUCCESS 02 00 00 00 05 00 00 00 ...
---
S3
HKLM/SYSTEM/CURRENTCONTROLSET/Control/Session Manager/Power/PolicyOverrides SUCCESS 04 00 00 00 05 00 00 00 ...
In my system, dumppo seems to have created the following register line which did not exist before:
HKLM/SYSTEM/CURRENTCONTROLSET/Control/Session Manager/Power/PolicyOverrides
with the following value: 04 00 00 00 05 00 00 00 - 00 00 00 00 ff ff ff ff - 00 00 00 00 ff ff ff ff
我也检查了一下,这个键值我的电脑里是没有的,正如微软的文档里所说的,这个是强制修改,也就是将原有的策略给override掉了。所以,我最终并没有使用这个方法,因为M$说这样做是很不正规的,仅为OEM场商测试硬件用的。
现在转回最新的DDK里提供的sleeper.exe这个东西上面,虽然微软说的天花乱缀,最后的结果是,这个东西是个烂东西。里面有一个选项是设置S3待机,经测试是无效果的。再GG一下,看看这个程序为啥无效果呢。结果GG到了另一个软件,sleeper 2.2。用这个新软件进行S3待机完全正常,也就是我的硬件和驱动完全支持S3待机,也正和前面dumppo cap,所显示的状态一样,可以正常支持。
到现在好像是黎明前最黑暗的时候,用软件可以实现,而XP自己没办法设置,我也最终走进了死胡通。过了几天,我终于狠下心,去打搅intel的800工程师,华硕就没这问题,就是你intel的毛病嘛。跟intel的工程师讲了半天,他好像不明白什么是S1,什么是S3,Suspend to RAM是怎么回事,让我着实恼火。他经过多次去请问别的工程师以后,终于把概念算弄明白了,然后就是一些所答非所问的东西出来。我跟他说,你拿个D865perl的主板自己试试先,看看安装系统的时候用S1,以后能不能通过bios改成S3.他还满负责的,就自己去测试了。大约不到5点的时候,工程师回了电话,他就可以正常待机。他说除了改了bios,还在控制面板的电源选项里,把电源的使用方案改成了:最少电源管理。我自己试了一下,居然也正常进入了S3待机。这么简单的就解决了问题,真让我郁闷。为什么我没去试这个选项呢,因为华硕的根本不用改这里S3就能正常工作。
经测试,华硕主板,电源选项里,电源的使用方案使用默认的家用/办公桌就能正常使用S3待机,而intel的板子,我这里测试的有D865perl和915GAV都需要改掉默认项,换成其它任何的都可以。连一直开着和演示都可以,只要不是家用/办公桌就行。我无法找到其它解释,只能把这归罪于,两种主板的出厂默认设置一个是S3,一个是S1,导致系统安装的时候,为默认的电源管理方案,提供了不同的配置,但使用了相同的名字:家用/办公桌。导这个问题的,到底是windows隐藏设计细节的原罪,还是intel没有严格测试的默认设置和不正确的联机说明,就没办法再追究了。但我想说的是,一个终端用户,为了一个主板已经实现,操作系统也支持的实用功能,大费周章,是所有用户所不想的。我都觉得我自己快得强迫症了,55555555555555555
所以,最后的解决方案就是,在电源选项里,把电源使用方案换成除家用/办公桌以外的,任何一种方案,世界就从此太平了。
BTW:我这里还提供另一种方法,我自己原创的,而且自己最后也是用的这个方法,因为要修改注册表,所以不推荐非专业人事使用,使用前请提前备份注册表。
HKEY_CURRENT_USER/Control Panel/PowerCfg/PowerPolicies/0/Policies
New: Type: REG_BINARY Length: 80 (0x50) bytes
000000: 01 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 | ................
000010: 00 00 00 00 00 00 00 00 00 00 00 00 08 07 00 00 | ................
000020: 00 00 00 00 32 32 00 03 04 00 00 00 04 00 00 00 | ,...22..........
000030: 1E F2 07 00 3F 9B 93 7C 00 00 00 00 00 00 00 00 | ........?..,...
000040: B0 04 00 00 58 02 00 00 00 00 64 64 64 64 FD 7F | ....?....dddd..Old: Type: REG_BINARY Length: 80 (0x50) bytes
000000: 01 00 00 00 02 00 00 00 01 00 00 00 00 00 00 00 | ................
000010: 00 00 00 00 00 00 00 00 00 00 00 00 08 07 00 00 | ................
000020: 00 00 00 00 32 32 00 03 02 00 00 00 02 00 00 00 | ,...22..........
000030: 1E F2 07 00 3F 9B 93 7C 00 00 00 00 00 00 00 00 | ........?..,...
000040: B0 04 00 00 58 02 00 00 00 00 64 64 64 64 FD 7F | ....?....dddd.. 这个就是家用/办公桌在注册表中的位置,我们只要把其中红色的部份,原始为02,改成04,即可,共它位置的数据,每台机器可能略有不同,大家也不用管别处,只改红色就行了。。改完以后,必须先重启,不然系统会在你选择该项的时候,将其改回原值。
终于把这么多天的经历写完了,不过还是省略了好多search,think和test的过程,也终于可以安稳的睡个好觉了。不再过多愤青了,虽然祖国的计算机事业已经被米国越甩越远,代工成为了流行,沦为发达国家加工零件的机器。系统核心,细节,永远只能靠test,靠guess.
|
|