2. 不同的方法

在以下章节中,我将介绍实现同一目标的不同方法:在您的 Athlon/Athlon-XP 系统上进行节电。我目前推荐的方法是使用“命令行技巧”或 athcool 程序(内核补丁已过时,将不再继续开发,而 LVCool 补丁仅支持一个芯片组系列)。

几乎所有这些方法都将在芯片组的北桥中设置 “当检测到 STPGNT 时启用断开连接” 位。所有其他工作都由内核的 ACPI 子系统完成,当处理器进入 acpi-c2 空闲模式时,它会向处理器发送 STPGNT 信号。

如果您还没有安装支持 ACPI 的内核,则必须在内核设置中启用它,然后重新编译新内核。您可以在通用设置+电源管理设置->ACPI下找到 ACPI 选项。您必须至少启用以下选项:ACPI 总线管理器系统处理器

或者对于新的 2.4.22 内核:通用设置+ACPI 支持。您必须至少启用以下选项:处理器

2.6.x 内核:电源管理选项+ACPI。您必须至少启用 处理器 选项。您不应该启用 Thermal Zone(热区)!!

某些芯片组在检测到 HLT 信号时也支持 STPGNT。这些主板/芯片组不需要启用 ACPI!目前,我正在寻找关于哪些芯片组在没有 ACPI 的情况下工作,哪些需要 ACPI 的反馈。也许您可以在您的主板上进行测试并给我发邮件。(参见第 3.1 节

2.1. 命令行技巧(推荐)

要使用命令行技巧,您通常需要在内核中启用 ACPI,否则会另行说明。启用节电功能无需重启。您可以使用以下命令从命令行启用/禁用它

适用于 KT133/133A、KX133、KL/KLE133、KM/KN133 等:(必须启用 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)))

适用于 KT266/266A/333、KM266/266A/333 等

启用

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)))

适用于 KT333CF/KT400/KT400A/KM400/KM400A/KT600

启用

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)))

适用于 KT880

启用

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)))

适用于 SIS730/733

启用: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)))

适用于 SIS735/740/745/755

启用: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)))

适用于 SIS741/741GX/746/748

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)))

适用于 Nforce

启用

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)))

适用于 Nforce2:(无需启用 acpi 即可工作)

启用: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)))

适用于 AMD751 和 AMD760/761:(不适用于 760MP!!!)(无需启用 acpi 即可工作)

启用: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)))

2.2. coolrun shell 脚本(推荐)

coolrun 是一个小型的 shell 脚本,它使用命令行技巧并为您完成所有工作。它由 Grozdan Nikolov 开发/维护,并基于本 HOWTO。

您可以在这里阅读更多关于它的信息(并下载它): https://sourceforge.net/projects/coolrun/

2.3. Athcool 程序(推荐)

Athcool 是一个小程序,它执行与上面的 setpci 命令相同的任务。它支持相同的芯片组并检测您拥有的芯片组,从而在芯片组中发出正确的设置,以使节电功能生效。

您可以在这里阅读更多关于它的信息(并下载它): http://members.jcom.home.ne.jp/jacobi/linux/softwares.html 我不是这个程序的作者!

2.4. BIOS 更新

在一些较新的主板上,制造商提供了 BIOS 更新,它会在主板的芯片组中设置所需的位(或者让您在 BIOS 设置中选择是否应启用它)。请参阅您的主板制造商的主页,以查看是否有这样的 BIOS 更新可用。

2.5. 内核补丁

该补丁基于我在 Newsnet 上找到的另一个补丁(来自 Jan Niehusmann)。我修改了该补丁,使其也支持 KT266/266A 芯片组。顺便说一句,我的补丁与命令行技巧的作用相同,只是该补丁是从内核内部完成的。这就是为什么我建议使用命令行技巧,它真的很容易使用,而且您不必修改您的内核。

好的... 现在一步一步地,这里是如何应用补丁

  1. 首先您必须下载补丁

    2.4.17 的内核补丁

    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)

  2. 以 root 用户身份登录

  3. cd /usr/src

  4. 应用补丁:cat $path-to-patch/amd_cool.diff | patch -p0(新的 2.6.5 补丁:cd 到 linux 并执行 patch -p1)

  5. cd linux

  6. 编译新内核

  7. 重启,并在内核启动提示符下,输入语句amd_disconnect=yes。这是因为 Athlon 处理器中存在已知的错误,可能会在某些主板上引起问题。您应该测试该补丁,如果它有效,您可以将该语句附加到amd_disconnect=yes到文件/etc/lilo.conf.

2.6. LVCool 解决方案

LVCool 是 Windows 程序 VCool 的一个小移植版本。它仅支持 KT133/133A 和 KX133 芯片组,我无法为其提供支持。您可以在这里下载它。此解决方案不需要在内核中编译 ACPI。

2.7. FVCool 程序

这里 是另一个节电程序,它支持多种芯片组。我没有亲自测试过它,但我听说它有效。去看看... 还有一个程序,您可以使用它来使用某些主板上的板载监控芯片(例如 lm-sensors 软件包)。

2.8. AMD 760MP 节电

有一个内核模块可以在 760MP 多处理器芯片组上启用节电功能。您可以在这里找到它。我不知道它的效果如何,但我至少收到过一封邮件,有人说它对他有效。所以去看看。