ハードウェアリセット方法

ALL
スポンサーリンク

ハードウェアリセットの方法です。

キーボードリセットによる方法

ポート 0x64 の bit 0 に 0 を書き込むと、コールドリセットされます。
0x64 はキーボードコントローラのポートです。

パソコン鳥も、15年以上前にこの方法でリセットするコードを書いたことがあります。

Linux ではリセットを実施するとき、アドレス 0x64 に 0xfe を書き込んでいます。
該当箇所はカーネルソースの arch/x86/kernel/reboot.c 、arch/x86_64/kernel/reboot.c のnative_machine_emergency_restart()関数内です。

PCIポートへのアクセスによる方法

ポート 0xCF9 に 0x06 を書き込むと、ウォームリセットされます。
ポート 0xCF9 に 0x0E を書き込むと、コールドリセットされます。

Linux ではキーボードリセットでリセットできなかった時に、この方法でリセットしています。
該当箇所はカーネルソースの arch/x86/kernel/reboot.c 、arch/x86_64/kernel/reboot.c のnative_machine_emergency_restart()関数内です。

Linux で /proc/sysrq-trigger に ‘b’ を書き込む

Linux限定ですが、下記で紹介したように、/proc/sysrq-trigger に ‘b’ を書き込むと、即座にシステムがリブートされます。

linux強制再起動 - shutdownコマンドでもダメな時の再起動手段 パソコン鳥のブログ

ここでのリブートは、上記の「キーボードリセットによる方法」「PCIポートへのアクセスによる方法」の方法によって、ハードウェアリセットが実施されます。

この方法も、カーネルソースの arch/x86/kernel/reboot.c 、arch/x86_64/kernel/reboot.c のnative_machine_emergency_restart()関数が呼ばれます。

参考

ISAPnP-HOWTO
Realtime Windows Now: PCの強制リセット手法
[PATCH] reboot: perform warm/cold reset correctly for CF9 type | Linux | Kernel

コメント