以下の各節では、同じ目的、つまり Athlon ベースのシステムでのパワーセーブを達成するための様々な手法を解説しています。 この中で今のところお勧めの方法は、"コマンドラインハック" を用いる方法です。カーネルパッチは既に古くなっていて開発も止まっており、 LVCool は一種類のチップセットファミリしかサポートしていません。 athcool プログラムは良さそうですが、まだ私自身は試していません。
これらの各方法はほぼ全て、チップセットのノースブリッジの "STPGNT 検出時ディスコネクトを有効にする制御ビット" を立てるものです。 以上でも以下でもありません。他の必要な処理は、acpi-c2 アイドルモードに入った時にプロセッサに STPGNT 信号を送るカーネルの ACPI サブシステム内で行っています。
カーネルに ACPI サポートが組み込み済みでは無い場合には、カーネルの設定をやり直して新しいカーネルを作り直す必要があります。 ACPI 関連のオプションは、
+ -> 以下です。 少なくとも、 、 と の各オプションは有効にする必要があります。または新しい 2.4.22 カーネルでは、
+ 以下です。少なくとも 以下のオプションは有効にしておく必要があります。一部のチップセットでは、HLT 信号検出時に STPGNT とする機能をサポートしています。これらのマザーボード/チップセットでは ACPI 機能を有効にする必要がありません。現在、ACPI なしで動くチップセットと ACPI が必要なチップセットの情報を募集しています。 あなたのマザーボードで試した結果をメールしてください (Section 3.1 参照)。
コマンドラインハックを使うには、通常はカーネルで ACPI サポートが有効になっている必要があります。 不要な場合には、その旨記載されています。 パワーセーブ機能を有効にするのにリブートは不要です。 パワーセーブ機能は以下のコマンドで On/Off 可能です。
有効化 - 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 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) | 0x0001)))
無効化 - setpci -v -H1 -s 0:0.0 6A=$(printf %x $((0x$(setpci -H1 -s 0:0.0 6A) & 0xfffe)))
有効化 -
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)))
有効化 - 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)))
Athcool は上の setpci コマンドと同じ処理を行う小さなプログラムです。 これは、上記と同じチップセットをサポートしており、あなたの持っているチップセットを自動認識してパワーセーブが動作するよう正しい設定を行います。
詳しくは (そしてダウンロードは) ここ から行えます。
新しいマザーボードの一部では、メーカがボード上のチップセットの必要なビットをセットする (または、有効にするかどうかを BIOS 設定から選択できるようにする) 機能を提供しています。マザーボードのベンダのホームページを見て、そのような BIOS アップデートがあるかどうかを確認してみてください。
私のパッチは Newsnet で見つけた別のパッチ (Jan Niehusmann さん作の物) を元にしています。また、このパッチが KT266/266A チップセットで動作するよう変更しています。 どちらにせよ、私のパッチはコマンドラインハックと同じことを、カーネルから行っているだけです。 このため、使い方が本当に簡単なコマンドラインハックの方がお勧めです。
手順を追って進めます。以下がパッチの当て方です。
まず以下のパッチをダウンロードします。
2.4.21 むけカーネルパッチ (2.4.21 にポートした Thomas Reinhardt さんに感謝)
root でログインします。
cd /usr/src
パッチを当てます - cat $path-to-patch/amd_cool.diff | patch -p0
cd linux
新しいカーネルを作ります。
リブートします。そしてカーネルのブートプロンプトのところで、 amd_disconnect=yes の一行を入力してください。 これは、Athlon プロセッサには既知のバグがあり、いくつかのボードでは問題が発生するためです。 このため、このパッチはまず動くことをテストする必要があります。 動くようなら、/etc/lilo.conf ファイルに amd_disconnect=yes の行を加えることができます。
LVCool は Windows 向けの小さなプログラム VCool の移植です。これは KT133/133A と KX133 チップセットしかサポートしていませんし、私もこれ以上のサポートはできません。 ここ からダウンロード可能です。 これは Linux カーネルの ACPI 機能を必要としません。
ここ に、いくつかのチップセットをサポートした別のパワーセーブプログラムがあります。 私自身は試していませんが、動作すると聞いています。試してみてください。 また、これには一部のマザーボードのボード上のモニタ機能を使うためのプログラム (lm-sensors に似た) が同封されています。
760MP マルチプロセッサチップセットでパワーセーブを有効化するカーネルモジュールがあります。 ここ から入手できます。 これがどの程度動作するものなのかはよく分かりませんが、少なくとも動作したというメールを一通受け取っています。 試してみてください。