【问题标题】:How do we shift from protected mode to real mode in Linux 2.6?我们如何在 Linux 2.6 中从保护模式转换到实模式?
【发布时间】:2010-10-24 04:28:41
【问题描述】:

我们如何在 Linux 2.6 中从保护模式切换到实模式?

【问题讨论】:

  • 为什么?你的 Linux 安装还不够崩溃吗?
  • 您到底想达到什么目的?您的要求实际上是不可能的,但如果您提供更多背景信息,有人可能会向您展示另一种实现您需要的方法。

标签: c linux assembly operating-system nasm


【解决方案1】:

你没有。

内核根本无法在实模式下运行,也无法(明智地)进行 bios 调用,因此您无论如何也无法执行任何操作。

您可能会查看 DosEMU 如何使用 v86 模式来运行您的“实模式”代码,但仅此而已。

【讨论】:

  • 你确定这在技术上是可行的吗?我似乎记得(从很久以前)i386 在进入保护模式后无法切换回实模式,但我可能弄错了。
  • 这在技术上是可行的,大多数 BIOS 和引导加载程序都必须这样做。您只需在 GDT 中设置类似于实模式的段,然后关闭保护模式位。问题是您无法在用户模式下执行此操作,并且内核将无用,因此您可能需要 v86。
【解决方案2】:

如果你真的需要硬件上的实模式,你也可以看看FreeDOS

【讨论】:

    【解决方案3】:

    内核在启动/启动序列的一开始就从实模式切换到保护模式,并且没有回头路。 有关更多详细信息,请参阅How Boot Loaders Work

    如果你有一些需要实模式的程序,有v86 modeSome work 正在增加对 64 位模式的支持。

    【讨论】:

      【解决方案4】:

      ELKS Linux 端口可以做实模式,但距离 2.6 还差得很远。

      【讨论】:

        【解决方案5】:

        我们可以通过编写一些代码行作为内核的一部分,从保护模式切换到实模式。

        主要是在禁用cr0上的PE位后,我们需要加载相应的GDT,LDT,IDT。 只需点击此链接了解更多详情http://www.sudleyplace.com/pmtorm.html

        【讨论】:

        • 感谢您的链接。但是是否有一套简单的指令可以从保护模式切换到实模式,将 /dev/sda 的前 512 个字节加载到 0000:0700 并将 JMP 加载到该地址?
        猜你喜欢
        • 1970-01-01
        • 2010-11-06
        • 1970-01-01
        • 2016-01-18
        • 1970-01-01
        • 2018-11-27
        • 2021-04-22
        • 1970-01-01
        • 2011-04-07
        相关资源
        最近更新 更多