2. 様々なアプローチ

以下の各節では、同じ目的、つまり Athlon ベースのシステムでのパワーセーブを達成するための様々な手法を解説しています。 この中で今のところお勧めの方法は、"コマンドラインハック" を用いる方法です。カーネルパッチは既に古くなっていて開発も止まっており、 LVCool は一種類のチップセットファミリしかサポートしていません。 athcool プログラムは良さそうですが、まだ私自身は試していません。

これらの各方法は全て、チップセットのノースブリッジの "STPGNT 検出時ディスコネクトを有効にする制御ビット" を立てるものです。 以上でも以下でもありません。他の必要な処理は、acpi-c2 アイドルモードに入った時にプロセッサに STPGNT 信号を送るカーネルの ACPI サブシステム内で行っています (LVCool を使った方法では異なったやり方を取っています)。

カーネルに ACPI サポートが組み込み済みでは無い場合には、カーネルの設定をやり直して新しいカーネルを作り直す必要があります。 ACPI 関連のオプションは、General Setup+Power Management Setup->ACPI 以下です。 少なくとも、ACPI Bus ManagerSystemProcessor の各オプションは有効にする必要があります。

2.1. コマンドラインハック

コマンドラインハックを使うには、カーネルで ACPI サポートが有効になっている必要があります。 これを行う方法は、Section 2.4 に記載されています。 カーネルに、既に ACPI-Processor サポートが組み込まれている場合、パワーセーブ機能をコマンドラインからリブートなしに On/Off 可能です。

KT133/133A, KX133, KL/KLE133, KM/KN133 の各チップセットでは

有効化 - 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/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)))

KT400 の場合 (試験的。動作した場合、レポートください)

有効化 -

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

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/746/755 の場合

有効化 - setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) | 0x0001)))

無効化 - setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffe)))

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 6D=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6D) | 0x80)))

無効化 -

setpci -v -H1 -s 0:0.0 E4=$(printf %x $((0x$(setpci -H1 -s 0:0.0 E7) & 0xf9)))

Nforce 2 の場合

有効化 - 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 (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. Athcool プログラム

Athcool は上の setpci コマンドと同じ処理を行う小さなプログラムです。 これは、上記と同じチップセットをサポートしており、あなたの持っているチップセットを自動認識してパワーセーブが動作するよう正しい設定を行います。

詳しくは (そしてダウンロードは) ここ から行えます。

2.3. BIOS アップデート

新しいマザーボードの一部では、メーカがボード上のチップセットの必要なビットをセットする (または、有効にするかどうかを BIOS 設定から選択できるようにする) 機能を提供しています。マザーボードのベンダのホームページを見て、そのような BIOS アップデートがあるかどうかを確認してみてください。

2.4. 私のカーネルパッチ

私のパッチは Newsnet で見つけた別のパッチ (Jan Niehusmann さん作の物) を元にしています。また、このパッチが KT266/266A チップセットで動作するよう変更しています。 どちらにせよ、私のパッチはコマンドラインハックと同じことを、カーネルから行っているだけです。 このため、使い方が本当に簡単なコマンドラインハックの方がお勧めです。

手順を追って進めます。以下がパッチの当て方です。

  1. まず、 カーネル 2.4.17 向けパッチ をダウンロードする必要があります。

  2. root でログインします。

  3. cd /usr/src

  4. パッチを当てます - cat $path-to-patch/amd_cool.diff | patch -p0

  5. cd linux

  6. 新しいカーネルを作ります。

  7. リブートします。そしてカーネルのブートプロンプトのところで、 amd_disconnect=yes の一行を入力してください。 これは、Athlon プロセッサには既知のバグがあり、いくつかのボードでは問題が発生するためです。 このため、このパッチはまず動くことをテストする必要があります。 動くようなら、/etc/lilo.conf ファイルに amd_disconnect=yes の行を加えることができます。

2.5. LVCool を使った方法

LVCool は Windows 向けの小さなプログラム VCool の移植です。これは KT133/133A と KX133 チップセットしかサポートしていませんし、私もこれ以上のサポートはできません。 ここ からダウンロード可能です。これは Linux カーネルの ACPI システムを使わない唯一の手段です。