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

4

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


7
为什么?你的Linux安装不够频繁地崩溃吗? - paxdiablo
1
你究竟想要实现什么?你所询问的并不是真正可能的,但如果你提供更多的上下文信息,有人也许能够向你展示另一种实现你所需的方法。 - jalf
5个回答

10
你不需要这样做。
内核无法在实模式下运行,也不能(合理地)进行BIOS调用,因此你无论如何都无法做任何事情。
你可以参考DosEMU如何使用v86模式来运行你的“实模式”代码,但仅此而已。

你确定这在技术上是可能的吗?我似乎记得(很久以前)i386没有办法在进入保护模式后切换回实模式,但我可能记错了。 - R.. GitHub STOP HELPING ICE
1
这在技术上是可能的,大多数BIOS和引导加载程序都必须这样做。您只需设置类似于实模式的GDT中的段,然后关闭保护模式位即可。问题在于您无法在用户模式下执行此操作,内核将变得无用,因此您可能需要v86。 - rpjohnst

2
如果您确实需要在硬件上使用实模式,您还可以查看FreeDOS

2
内核在开机/启动序列的非常开始阶段从实模式切换到保护模式,且无法回头。 详细信息请参见《启动引导程序的工作原理》
如果您有一些需要实模式的程序,可以使用v86 模式。目前正在进行一些工作以在64位模式下添加对此的支持,详情请参见这里这个项目

1
我们可以通过编写内核代码的一部分,从保护模式切换到实模式。
关键是在禁用cr0寄存器上的PE位后,我们需要加载适当的GDT、LDT和IDT。请访问http://www.sudleyplace.com/pmtorm.html了解更多细节。

谢谢提供链接。但是是否有一组简单的指令,可以从保护模式切换到实模式,将/dev/sda的前512字节加载到0000:0700,并跳转到该地址? - WinEunuuchs2Unix

1

ELKS Linux端口可以使用实模式,但远远达不到2.6的水平。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接