ハードウェアリセットの方法です。
キーボードリセットによる方法
ポート 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
コメント