ACPI

作成日:2003/07/08

更新日:2003/07/16


RedHat Linux 9 on Vaio PCG-Z1R/PにACPI を導入した記録.


カーネルは 2.4.21 に変更してある.googleさんに聞いて,以下のものが必要だということが判明.

kernel acpi パッチ
Software suspend パッチ

Software suspend のパッチについては,2.4.21 に対しては,まだ,pre-release 版へのパッチしか無いが,大丈夫だろうと,patch-acpi-acpi20020918-swsusp15.gz をダウンロードして適用してみたものの,コンパイルの段階で失敗する.やはり,バージョンの違うものに無理矢理パッチをあててもダメか.

モノがモノだけに無理は禁物.2.4.21acpi 用のパッチが出るのを待つかとも思ったが,バッテリー残量だけでも確認できるようにしておきたいので,software suspend パッチはとりあえず見送って,acpi パッチだけをあてることにする.

# 古いソースツリーを温存してkernel sourceを展開.別名にしておく.
cd /usr/src
mv linux-2.4.21 linux-2.4.21.org
tar jxvf linux-2.4.21.tar.bz2
mv linux-2.4.21 linux-2.4.21-acpi
mv linux-2.4.21.org linux-2.4.21
# パッチあて.
cd linux-2.4.21-acpi
gunzip -c ../acpi-20030619-2.4.21.diff.gz | patch -p1
# Makefile で EXTRAVERSION を "acpi" に設定
make xconfig
emacs -nw Makefile
# コンパイル
time make dep clean bzImage modules modules_install install

うお!5分たらずでコンパイル完了,っと喜んだのも束の間.新しいカーネルで再起動して,バッテリーモニタを起動してみたが,認識されてない./proc/acpi も存在していないので,何か間違っている.

config でミスしたかと,再度 make xconfig してみたら,ACPIサポートのところで,CONFIG_ACPI のみが有効になっており,以下全てがグレーアウトしていてオプションが選べない状態になっている.

.config ファイルを見ると,ちゃんと CONFIG_ACPI_BATTERY=y とかなってるし,おっかしいなあと,いろいろいじった結果,CONFIG_SMP=y とすれば CONFIG_ACPI_BATTERY=y とかも(xconfig上で)有効になるみたい.

これでいいんだか.なんだか訳がわかりませんし,Z1R/PはSMPじゃないので気分が悪いのですが,一応この状態で再度カーネルを build してみる.

成功!証拠

今日はひとまずここまで.ACPI関連ユーティリティーの導入や,サスペンドの実現は後日挑戦


後日談1

CONFIG_SMP=y としたカーネルでは,APMが無効にされて shutdown -h などで,自動電源断ができないというのは知っていたのだが,ACPIでも同じ症状がでた.ノートパソコンなので,結構shutdownするんだよね,これでは不便.

カーネルの Config を色々試して,# CONFIG_SMP is not set でも,CONFIG_X86_UP_APIC=y ならば ACPI のオプションが選択できて,有効になることが分かったのだが,自動電源断ができないのは相変わらず.

次に,RedHat のカーネルソース(2.4.20-18.9)でもACPIが有効にできるので,こちらで試したら,特にSMPやAPIC(ああ,ACPIだのAPICだの,ややこしい…)を有効にしなくても ACPI のオプションが選択できて,ACPI,電源断ともに有効なカーネルが出来た.

しかーし! ACPIが有効になっていることは,dmesg や /proc/acpi 以下で確認できているものの,今度は gnome-applets に含まれているバッテリーモニタで残量確認ができなくなった./proc/acpi 以下に現れるディレクトリ名やファイル名,ファイルのフォーマットが微妙に異なっているために,常に残量 0 と思ってしまうようだ.gnome-applets のソースに手をいれようかとも思ったが,それは最後の手段./proc/acpi 以下を見ればバッテリー残量は確認できるものの,やっぱり Desktop Workstation として利用しているので,リアルタイムかつグラフィカルに確認したい.

次に試したのは,linux-2.4.20 のオリジナルのソース + ACPI パッチ.これはあっさりうまくいきました.ACPIが有効になって,自動電源断もできるし,バッテリーモニタの表示も正常.当面はこれでしのぐか?

しかし,2.4.20 は RedHat-9 のデフォルトカーネルより古いし,セキュリティパッチも出ている.Ext3脆弱性のパッチをあててみたが,ACPIパッチと両立しなかった…

なんとか 2.4.21 でうまくいかないものかと,試行錯誤した結果,make xconfig の時に

  1. Processer type and features で,いったん Local APIC support on uniprocessorsy にする.
  2. General setup で,ACPI の設定.その他必要なカーネルの設定.
  3. 最後に,Processer type and features で,Local APIC support on uniprocessorsn に戻して,保存・終了する.

とやれば良い判明しました.Config 関連のバグ … なのかな?


後日談2

カーネルを最新テスト版のlinux-2.6.0-test1にしてみました.

パッチも要らず,Configの変な苦労も無く,問題なくACPIが使用できています.


後日談3

最新安定版カーネル(linux-2.4.22)では,ACPIパッチは不要で,Configも何ら問題なくなりました.


TOYAMA Shin-ichi
[ 戻る ]