首页 文章

在保护模式下重新启动

提问于
浏览
4

在x86实模式下,重启非常简单 . 您可以使用BIOS或:

jmp 0xFFFF:0000

但是如何在保护模式下重启?

4 回答

  • 3

    我曾经写过6到端口0xcf9,但这里有一个更大的列表:http://smackerelofopinion.blogspot.nl/2009/06/rebooting-pc.html?m=1

  • 2

    在保护模式(x86或x86_64)上重新启动的正确方法是使用电源管理功能(如果可用)

    • 高级配置和电源接口(ACPI)

    • 高级电源管理(APM)

    • BIOS(在vm86或模拟器下) - 但我建议不要费心 .

    快速而肮脏的方式是做三重故障 .

  • 2

    有关端口0xCF9的信息 .
    为了写入它,需要访问内核模式(来自内核驱动程序的含义) .

    0xCF9端口可以为三种类型的重置获得三个值:

    Writing 4 to 0xCF9:(INIT) 将INIT CPU . 这意味着它将跳转到启动的初始位置,但它将保持许多CPU元素不变 . Init调用会保留大多数内部表,字符等等(但在此期间可能会发生变化) .

    Writing 6 to 0xCF9:(RESET) 将所有内部表缓存等重置为初始状态的CPU .

    Writing 0xE to 0xCF9:(RESTART) 将使用随附的所有东西为主板供电 .

    Example in a windows driver:

    __outbyte(0xCF9,0xE);

  • 3

    虽然我找不到直接引用,但是OSDev forums上的人提出了以下建议(显然是从Linux代码中提取的):

    ;Forcing reboot with keyb controller ;)
    _reboot:
    WKC:
        XOR         AL, AL
        IN          AL, 0x64
        TEST        AL, 0x02
        JNZ         WKC
    
        MOV         AL, 0xFC
        OUT         0x64, AL
    

相关问题