ソフトウェアサスペンド

SWSUSPをインストールしてみる
今までハードウェアサスペンドでなんとかしてきたけど
それでもやっぱり少しずつはバッテリーを消費したりして不安が残る
やっぱりハイバネーションしかないでしょ
(毎日充電するから要らないっていえば要らないんだけどね)
参考にしたサイトは、ここここです。ありがとうございました。
材料集め
まずはACPIのパッチを当てる必要があるらしい
ん?まてよ。acpiってゆったら kernel panic のもとじゃなかったけ?
インストールしたときliloのオプションでacpi=offとやって起動するようになったんだよなぁ
そうか、バクやったんですね
パッチ面倒くさいのでこのさいついでだから2.4.22にしちゃいます
ということで http://www.kernel.org から linux-2.4.22.tar.bz2 をダウンロードしてきます
次に http://sourceforge.net/projects/swsusp/ から swsusp-1.0-2.4.21.tar.gz をもってきます
swsusp-1.0.2.4.21.tar.gz にも suspend.sh は含まれているんですが、ディストリビューション名とか Vine の記述がなかったりするので
Vine用にカスタマイズされた suspend-vine.sh を http://jegog.phys.nagoya-u.ac.jp/~tkonishi/cn/T1/swsusp/ からダウンロードしてきます
以上で材料がそろいました。全部同一ディレクトリにおいておきます。
解凍したりパッチ当てたりする
カーネルのそーすを解凍します
$ bunzip2 -dc linux-2.4.22.tar.bz2 | tar xvf -
次にSWSUSPの解凍をします
$ tar xvzf swsusp-1.0-2.4.21.tar.gz
ディレクトリを移動します
$ cd linux-2.4.22
下記の順番で各種パッチを当てます。
まず、SWSUSP用のACPIパッチです
$ bunzip2 -dc ../swsusp-1.0-2.4.21/acpi-option.bz2 | patch -p1
次に、SWSUSPのパッチを当てる
$ bunzip2 -dc ../swsusp-1.0-2.4.21/swsusp-1.0-2.4.21.bz2 | patch -p1
さらに、エラー修正のパッチを当てるみたいです
$ patch -p1 < ../swsusp-1.0-2.4.21/fix-2.4.22-pre-rejects
ついでに、ノートパソコンのバッテリーを長持ちさせるパッチを当てる
$ bunzip2 -dc ../swsusp-1.0-2.4.21/laptop-option.bz2 | patch -p1
以上で準備完了です
次はいよいよコンパイルです
ガイーンとコンパイルする
さぁそのままコンパイルまでやってしまおう
まず、カーネル設定ファイルをとってくる
$ cp /usr/src/linux/configs/kernel-2.4.20-i686.config .config
でこのコピったファイルを使用してmakeする
$ make oldconfig
そしたら新規追加項目の設定を聞いてくるので
Software Suspend (CONFIG_SOFT_WARE_SUSPEND) [N/y/?] これを y
Compress image (CONFIG_SOFTWARE_SUSPEND_COMPRESSION) [N/y/?] これも y
で後はそのままリターン押し続けます
次は
$ make xconfig
(または make menuconfig)
を実行して設定の変更を行う
Processor type and feature -> Loacl APIC support on uniprocessors を Y
Processor type and feature -> IO- APIC support on uniprocessors を Y
USB Support -> USB Multimedia devices の項目を全て N
Console drivers -> Frame-buffer support -> ATI Radeon display support を N
Console drivers -> Frame-buffer support -> ATI Rage 128 display support を N
にします
やっとこさカーネルのコンパイルです
$ make dep clean bzImage modules
オイラはGrubユーザじゃないので
コンパイルが完了したらrootになって
# make install
# make moduels_install
とします
/boot にそれらしいものが新しい日付でできてたら大丈夫です
lilo.conf を修正する
できあがったカーネルで起動するように /etc/lilo.conf を修正します
image= のところにはできあがったカーネルを指定する
label= のところはなんでもいいのだが、カーネル名そのままを入れた
append= のところは acpi=on とした( kernel panic おこすなよー)
そして最初はapmをoffにしておいた(自動で電源おちるように後からonにした)
あとは肝心のスワップ領域を指定する resume=/dev/hda5
でこんな感じ↓になる
	image=/boot/vmlinuz-2.4.22
        	label=linux-2.4.22
        	append="acpi=on apm=on resume=/dev/hda5"
        	read-only
        	root=/dev/hda3
編集がおわったら保存して /sbin/lilo を実行しておく
再起動後の作業
再起動して作成したカーネル(linux-2.4.22)で起動しておく
ハイバネーションのコマンドを設定する
# suspend-vine.sh --install
とすると /usr/sbin/hibernate と /etc/suspend.conf が作成される
suspend.conf をいじると各環境に応じたハイバネーションが行えます
例えば SWSUSP_INSERTMODS="" ここには resume 後に読み込むモジュールを設定します
lsmod の内容をハイバネの前後でメモっておいて自動で読み込まれていないものはここに記述して自動化します
まずは何も考えずに実行してみます
実際やってみる
# /usr/sbin/hibernate
おおおーーーー!
プログレスバー(テキスト)が動いてて100%になって電源OFF可能になった
(後日カーネルオプションを apm=on として自動電源OFFするようになった)
できた!
今度は電源を入れてみる
はれ?カーネル選択可能だ
そうか同じカーネルで起動しないといけないってのはこのことか
慎重にもう一度 linux-2.4.22 を選択して起動
途中の画面が文字化けしていたのでものすごく不安だったけど元に戻った!
やった!
動作確認
ネットワーク、通信OK
キーボード、マウスともにOK
PCカード、 Air-H" が使えたのでOK
サウンド、XMMS で MP3ファイルが再生できたのでOK
USB、USBメモリを挿してみる...がこれは反応なし
lsmod をハイバネ前後で比較してみると uhci がなくなってる
# insmod uhci
と実行すると認識可能になった(自動じゃなくてもいいから、これでもいいや)
ひととおりなんとかなってそうな気配です
超満足
問題点
ハードウェアサスペンドを実行して復帰させます
その状態から /usr/sbin/hibernate を実行すると何やら失敗こきます
うーーん、併用は無理か....
(まぁいいか、これはBIOSで殺しておこう)
ちなみにハイバネに失敗したときは次回正常起動時に
# /sbin/mkswap /dev/hda5
と実行してSWAP領域をキレイにしたほうがいいらしい

ハイバネってこんなに時間かかったけ?
ハードウェアサスペンドに慣れきっていたからすごく遅く感じる
(まぁいいか、そんなに時間が惜しいわけでもないし)
これはいいかも
今回 Vine の SWAP領域は /dev/hda5 にしたわけですが
XPは別のパーティションがハイバネ用領域のはず
ってことは XP は 休止状態 Vine は ハイバネ状態にできるのでは?

でけました!
両OSともに問題なしです