サスペンドさせる(モバイルパソコンにする)

apm か acpi か

ゐんどうず を使っていると考える必要などないが、
PCには電源供給方式が現在、二つある。
APM か ACPI か である。

APM は BIOS で電源制御するものであり、
ACPI は OS で電源制御するもの、
と考えて間違いないだろう。

現在、主流は ACPI なんだそうだ。
ゲイツ主導で、である。当然。
しかし、現状(2003年08月現在)、linux でこのACPI制御は大変である。
なんせ、マシンごとに異なるハードを使っているのだから、それをOSで制御するということは、
現状市場に出回っているパソコンはもちろん、これまであったハードに関する情報もすべて
網羅できるようになっていなければならないからだ … と思う。
(が、時代の潮流を無視するわけにはいかないので,
次期カーネル(2.6)からはこの ACPI の正式サポートが最大の売りになる … という)

… というわけで apm でなんとかサスペンドする方法はないか、と調べてみると … あった。
http://hase.pm.twin.ne.jp/~osic/past.html#osinstall22
これは心強い。というわけで、早速準備に取り掛かる。

手順

  1. Gnu Parted (今回は USB フロッピーでブートできる"partboot-1.6.5-usb" とかいうのを使う)で /のパーティション分け.
  2. fdisk で /hda4 を作り,"type a0"でフォーマット.
  3. lphdisk で phenix bios のサスペンド領域用に再フォーマット.

手順1 GNU Parted

まず、APM で サスペンド するためには、ハードディスクに、サスペンド(ハイバネーション)専用のパーティションが必要になる。
が、我が s30 は Debian インストール中に パーティションは 最低限
スワップ領域とルート領域しか作っていない。

# fdisk -l
Device
Boot
Start
End
Blocks
Id
System
/dev/hda1

1
62
497983+
82
Linux swap
/dev/hda2
*
63
3648
28804545
83
Linux

となっている。
そうなると、まずはパーティション分けである.
う〜む,USB ブートの ディスケット対応のツールなどあるのか …
ありました

というわけでまず,こいつをこいつを使って(windows上から)フロッピーにインストール
(フロッピー一枚の linux になっております).<= やり方はここが手取り足取り教えてくれます

手順 その2

[ ] は 実際の操作. ( )は表示

01. <usb-floppy boot> <= USB フロッピーから ブート. BIOS いじっておこーねー
02. [enter]
03. [parted /dev/hda] <= ま,各々の事情はあるだろーが.デュアルOSなんてしなければ,普通こうでしょ.
04. (parted) [p] <= "Print" だが,これでもいい.以下,内容表示.
Minor Start End Type Filesystem Flags
1 0.031 486.342 primary linux-swap
2 486.343 28607.937 primaty ext3 boot
05. [(parted) resize 2] <= "Minor 2" の領域を変更する時に使うコマンド"resize"
06. (Start? [486.3428]?) [Enter] <= "Filesystem"が"ext2 (3))"の場合ここは変更してはいけない.
07. (End ? [28607.9365]?) [21107 Enter] <= ここは自由にど〜ぞ.
(waiting time 5min) ※Pentium3 600Mhz だとこのくらい.
08. (parted) [p]
Minor Start End Type Filesystem Flags
1 0.031 486.342 primary linux-swap
2 486.343 21108.845 primaty ext3 boot
09. (parted) [mkpart primary ext3 21108.846 28100] <="mkpart"でformat. [タイプ 開始位置 終了位置] だね.
10. (parted) [p]
Minor Start End Type Filesystem Flags
1 0.031 486.342 primary linux-swap
2 486.343 21108.845 primary ext3 boot
3 21108.845 28098.061 primary
11. (parted) [resize 3] <= さらに Minor 3 に 5. からの手順を繰り返してやる.ここが 問題の領域になる.
12. (Start ? [28098.062]?) [Enter]
13. (End ? [28607.9365]?) [28615.781]
14. (parted) [mkpart primary ext2 28098.062 28615.781] <=気まぐれで ext2 で作った.
15. (parted) [p]
Minor Start End Type Filesystem Flags
1 0.031 486.342 primary linux-swap
2 486.343 21108.845 primary ext3 boot
3 21108.845 28098.061 primary
4 28098.062 28615.781 primary
16. (parted) q <= Parboot-USB ご苦労さん.
17. (#bash) reboot <= 素早く USB-FLOPPY は抜いておく.

手順 3 fdisk やね (参照はここ)

18.	[su] => # 
19. [fdisk /dev/hda]
(The number of cylinders for this disk is set to 3648.
There is nothing wrong with taht, but this is larger then 1024,
and could in certain setup cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning sftware from other OSs
(e.g., DOS FDISK, OS/S FDISK) ) <=という表示がでる.
20. Command (m for help):[t] <= t :パーティション・タイプを変更する。初期値は"Linux native"(83)
21. Partition number (1-4) :[4] <= 15.の Minor 4 部分をハイバーネション領域にするかんね.
22. Hex code (type L to list codes):[L]
(リスト一覧がでる)
23. Hex code (type L to list codes):[a0] <= Thinkpad hibernation だけのためのファイルフォーマット!
Changed system type of partition 4 to a0 (IBM Thinkpad hibernation)
24. Command (m for help):[p] <= この項目の一番下! ちゃんと System が変更されちょるやろ?!
(Disk /dev/hda: 255 heads, 63 sectors, 3648 cylinders
Units = cylinders of 16065 * 512 bytes)
Device Boot Start End Blocks Id System
/dev/hda1 1 62 497983+ 82 Linux swap
/dev/hda2 * 63 2691 211174432+ 83 Linux
/dev/hda3 2692 3582 7156957+ 83 Linux
/dev/hda4 3583 3648 590145 a0 IBM Thinkpad hibernation
25. Command (m for help):[w] <= これで設定を確定しておかないと,いつまでたっても次へ進まない.

手順 4 lphdisk (apt-get install しておこーね)

26.	# lphdisk <=これだけ. 後は勝手に領域を自動検索して Phenix BIOS 用にフォーマットしてくれる
Recommended partition size is 262MB (536578 sectors)
Creating hibernate area on /dev/hda, partition 4 ...
Formatting sector 1060290/ (sectors of 512 bytes)
Format complete.

手順 5 お〜 長かった

後は,
# emacs /etc/lilo.conf
で vga 云々 の下あたりに
" apm=on "
とか書いてやって,

apmd インスコしてなかったら, apt-get して,

# apm -s

でハイバネーションのできあがり.(バイオスが一生懸命ハードディスクに保存してくれている様を拝むことができる)

追記 (2003-09-16)

この一連の作業をしている途中に かなりカーネルの電源回りをいじくりまわしたのだが,
APM によるハイバネーションが可能になると,どうも s30 のバッテリー消費量が
気になり出した(やたらと消耗がはやいのだ).
というわけで,ここを参照に "General setup" をいじってみた.

	General setup  --->
[M] Power Management support < > ACPI support <*> Advanced Power Management BIOS support [ ] Ignore USER SUSPEND [*] Enable PM at boot time [*] Make CPU Idle calls when idle [*] Enable console blanking using APM [ ] RTC stores time in GMT [*] Allow interrupts during APM BIOS calls [*] Use real mode APM BIOS call to power off