在以下章节中,我将介绍实现同一目标的不同方法:在您的 Athlon/Athlon-XP 系统上进行节电。我目前推荐的方法是使用“命令行技巧”或 athcool 程序(内核补丁已过时,将不再继续开发,而 LVCool 补丁仅支持一个芯片组系列)。
几乎所有这些方法都将在芯片组的北桥中设置 “当检测到 STPGNT 时启用断开连接” 位。所有其他工作都由内核的 ACPI 子系统完成,当处理器进入 acpi-c2 空闲模式时,它会向处理器发送 STPGNT 信号。
如果您还没有安装支持 ACPI 的内核,则必须在内核设置中启用它,然后重新编译新内核。您可以在
+ -> 下找到 ACPI 选项。您必须至少启用以下选项: 、 和 。或者对于新的 2.4.22 内核:
+ 。您必须至少启用以下选项: 。2.6.x 内核:
+ 。您必须至少启用 选项。您不应该启用 Thermal Zone(热区)!!某些芯片组在检测到 HLT 信号时也支持 STPGNT。这些主板/芯片组不需要启用 ACPI!目前,我正在寻找关于哪些芯片组在没有 ACPI 的情况下工作,哪些需要 ACPI 的反馈。也许您可以在您的主板上进行测试并给我发邮件。(参见第 3.1 节)
要使用命令行技巧,您通常需要在内核中启用 ACPI,否则会另行说明。启用节电功能无需重启。您可以使用以下命令从命令行启用/禁用它
启用:setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) | 0x80)))
禁用:setpci -v -H1 -s 0:0.0 52=$(printf %x $((0x$(setpci -H1 -s 0:0.0 52) & 0x7f)))
启用
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) | 0x80)))
setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) | 0x02)))
禁用
setpci -v -H1 -s 0:0.0 92=$(printf %x $((0x$(setpci -H1 -s 0:0.0 92) & 0x7f)))
setpci -v -H1 -s 0:0.0 95=$(printf %x $((0x$(setpci -H1 -s 0:0.0 95) & 0xfd)))
启用
setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) | 0x80)))
setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) | 0x02)))
禁用
setpci -v -H1 -s 0:0.0 D2=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D2) & 0x7f)))
setpci -v -H1 -s 0:0.0 D5=$(printf %x $((0x$(setpci -H1 -s 0:0.0 D5) & 0xfd)))
启用
setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) | 0x80)))
setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) | 0x02)))
禁用
setpci -v -H1 -s 0:0.0 82=$(printf %x $((0x$(setpci -H1 -s 0:0.0 82) & 0x7f)))
setpci -v -H1 -s 0:0.0 85=$(printf %x $((0x$(setpci -H1 -s 0:0.0 85) & 0xfd)))
启用:setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) | 0x01)))
禁用:setpci -v -H1 -s 0:0.0 6B=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6B) & 0xfe)))
启用:setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) | 0x0003)))
禁用:setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffc)))
setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) | 0x0003)))
禁用
setpci -v -H1 -s 0:0.0 6C=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6C) & 0xfffc)))
启用
setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) | 0x06)))
禁用
setpci -v -H1 -s 0:0.0 E7=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9)))
启用:setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) | 0x10)))
禁用:setpci -v -H1 -s 0:0.0 6F=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6F) & 0xef)))
启用:setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) | 0x06)))
禁用:setpci -v -s 0:0.0 0x62=$(printf %x $((0x$(setpci -H1 -s 0:0.0 62) & 0xf9)))
coolrun 是一个小型的 shell 脚本,它使用命令行技巧并为您完成所有工作。它由 Grozdan Nikolov 开发/维护,并基于本 HOWTO。
您可以在这里阅读更多关于它的信息(并下载它): https://sourceforge.net/projects/coolrun/
Athcool 是一个小程序,它执行与上面的 setpci 命令相同的任务。它支持相同的芯片组并检测您拥有的芯片组,从而在芯片组中发出正确的设置,以使节电功能生效。
您可以在这里阅读更多关于它的信息(并下载它): http://members.jcom.home.ne.jp/jacobi/linux/softwares.html 我不是这个程序的作者!
在一些较新的主板上,制造商提供了 BIOS 更新,它会在主板的芯片组中设置所需的位(或者让您在 BIOS 设置中选择是否应启用它)。请参阅您的主板制造商的主页,以查看是否有这样的 BIOS 更新可用。
该补丁基于我在 Newsnet 上找到的另一个补丁(来自 Jan Niehusmann)。我修改了该补丁,使其也支持 KT266/266A 芯片组。顺便说一句,我的补丁与命令行技巧的作用相同,只是该补丁是从内核内部完成的。这就是为什么我建议使用命令行技巧,它真的很容易使用,而且您不必修改您的内核。
好的... 现在一步一步地,这里是如何应用补丁
首先您必须下载补丁
2.4.21 的内核补丁(感谢 Thomas Reinhardt 将其移植到 2.4.21)
2.6.5 的内核补丁,它支持所有 Via 芯片组,直至 KT600(感谢 Sebastian Droege 将其移植到 2.6.5 并添加了其他芯片组)
2.6.9 的内核补丁,它支持所有 Via 芯片组,直至 KT600(感谢 Alexander Hug 将其从 2.6.5 移植到 2.6.9)
以 root 用户身份登录
cd /usr/src
应用补丁:cat $path-to-patch/amd_cool.diff | patch -p0(新的 2.6.5 补丁:cd 到 linux 并执行 patch -p1)
cd linux
编译新内核
重启,并在内核启动提示符下,输入语句amd_disconnect=yes。这是因为 Athlon 处理器中存在已知的错误,可能会在某些主板上引起问题。您应该测试该补丁,如果它有效,您可以将该语句附加到amd_disconnect=yes到文件/etc/lilo.conf.
LVCool 是 Windows 程序 VCool 的一个小移植版本。它仅支持 KT133/133A 和 KX133 芯片组,我无法为其提供支持。您可以在这里下载它。此解决方案不需要在内核中编译 ACPI。
这里 是另一个节电程序,它支持多种芯片组。我没有亲自测试过它,但我听说它有效。去看看... 还有一个程序,您可以使用它来使用某些主板上的板载监控芯片(例如 lm-sensors 软件包)。
有一个内核模块可以在 760MP 多处理器芯片组上启用节电功能。您可以在这里找到它。我不知道它的效果如何,但我至少收到过一封邮件,有人说它对他有效。所以去看看。