286 上有 Linux 吗?

286 上有 Linux 吗?

我没有 286,也不打算在其中运行 Linux。但是既然286有保护模式,为什么经常说Linux需要386或更高的CPU呢?

http://tuxmobil.org/286_mobile.html看来ELKS版本的Linux可以在286上运行,这是正确的吗?为了允许内核在 286 CPU 上运行,进行了哪些(如果有)修改?

现在显然我明白为 386 编译的内核无法在 16 位的 286 CPU 上执行。所以我的问题是,为什么不能为286编译标准Linux内核,然后在286上执行? Linux需要硬件VM86支持吗?

答案1

286 保护模式 (PM) 与 386 提供的功能有根本不同。将 286 PM 视为原型,它有很多缺点,几乎没有人使用过它,而整个系统是针对 386 完全重新设计的。

它没有使用平面内存模型,而是使用像实模式这样的分段模型,这意味着您必须一次跨越 64kB 的块来访问内存。

它与当时所有可用的(MS-DOS)程序完全不兼容,因此一旦进入 PM,您就无法使用任何您习惯的程序。

除非重新启动 PC,否则您也无法再次离开保护模式,因此制造商提出了创造性的解决方案,例如在 RAM 中放置一个标志,然后向键盘控制器写入一个神奇值,这将轻弹 CPU 上的重置引脚以重新启动计算机。机器。 BIOS 要做的第一件事是检测之前设置的标志,然后跳回原始程序而不是运行 POST 例程,从而允许原始程序在“退出”PM 后继续运行。

这意味着使用 286 PM 会阻止您在没有大量技巧的情况下运行正常的 DOS 程序。在只有 DOS 程序的时代,使用 PM 根本不值得。

因此,使用 286 PM 比没有它并依赖 EMS 和 XMS 访问额外内存更加复杂。许多 286 主板都具有对 EMS 的芯片组支持,因此您可以使用所有额外的系统内存,而无需 PM。

Intel 认识到了这些缺点,并在 386 中生产了一种全新的完全不同的 PM。扁平内存模型使得访问高达 4GB 的内存块变得简单。 CPU 可以通过几条指令进入和退出 PM,因此不需要笨拙的重启协议。 VM86意味着大多数时候你甚至不需要退出PM,你就可以在PM中运行DOS程序。

所有这些改进意味着 386 PM 不仅功能更强大,而且兼容性也显着增强。

换句话说,286 和 386 保护模式唯一的共同点就是名称。这就是 PM 操作系统通常为 386 或更新版本的原因。添加对 286 PM 的支持将是一项完全独立的工作,几乎或根本没有代码能够与完全不同的 386 PM 共享。

相比之下,386 PM 的工作方式几乎相同,直到最后一个 32 位 CPU,如果您在 64 位 CPU 上运行 32 位软件,甚至更久。

答案2

内核中的某些部分是用汇编语言编写的,必须重写它们才能支持 286。

关于 ELKS,在他们的 FAQ 中他们指出它是 Linux 内核的一个子集,所以也许他们只移植了绝对必要的部分。

答案3

我认为我的问题的真正答案是这样的:

除了 C 代码之外,每个主要的 CPU 架构(或其主要修订版)都需要一些汇编支持代码。

即使你让 GCC 将 Linux 内核编译成 16 位 286 机器代码,仍然会缺少必要的 16 位 286 兼容汇编代码。

换句话说,内核最多只能构建部分。任何特定于体系结构的汇编代码都将无法汇编,因为它根本不是为该体系结构编写的。

基于此,我假设这正是 ELKS 和类似项目在 286 或其他架构上实现 Linux 时所做的事情——它们实现了缺少的汇编支持代码。

答案4

Linux需要硬件VM86支持吗?

我不是装配工,但根据:

作为 8086 架构 32 位扩展的原始实现,80386 指令集、编程模型和二进制编码仍然是所有 32 位 x86 处理器的共同点,这被称为 x86、IA-32 或 i386 - 架构,取决于上下文。

386 代表一个扩展指令集从286开始,所以谁知道端口有多难。很明显,几乎没有人愿意尝试……我想你可以向 ELKS 的人询问这一点。

相关内容