私人短信系统限制 500 字符,一不小心就会丢失输入的内容。我已经丢失多次了。所以改在这里回复,放心一些。
====== 在 2003-10-19 2:26:51 您来信中写道: ======
我想问一下,GRUB for Linux可以在纯Linux甚至X-Window的Linux窗口(Linux termin)下本地运行,而且可以随时用quit命令退出GRUB而回到Linux命令行下,那为什么不如真正使用DOS下的编译器来将GRUB移植到DOS环境下,成为一个本地化的DOS软件而提高兼容性和适应性呢?
=====================================
确实,在决定开发 grub for dos 之前,我曾经在 http://www.google.com/ 上搜索 grub.exe, 搜索到了有关的网页,但有些关键的网页打不开,想用 GOOGLE 的网页缓存,这个,在中国大陆已经被禁止了,所以很多珍贵的资料不能见到。
但是也搜索到了少数有关 grub.exe 的网页,这些都是 GNU GRUB 的 bug 跟踪网页,是一些信件。从这些信件中略微知道 grub for dos 这个目标曾经有人努力去做过,但是,似乎觉得没有了下文。其中也有人指出,用 gnu grub 在 DOS/Windows 平台进行直接编译的问题。但是,好像没有人去直接编译,或者也可能是虽然编译了,但未成功。
当我进一步考虑这个问题的时候,我发现,即使编译成功,也没有太大意义。为什么呢?看看 Linux 下的 grub shell 就知道了。这个 GRUB SHELL 只能用来安装 GRUB,测试 GRUB 的一些命令,但是不能用来从 LINUX 下直接 boot 到另外一个操作系统。几乎所有的 GRUB 命令,都可以在 LINUX 的 GRUB SHELL 下执行,但 boot 命令除外。试想,如果像这样来实现 GRUB for DOS ,那有什么意义呢?
Linux 下之所以不能用 GRUB 的 boot 命令,最根本的原因是,在 Linux 下无法回到实模式并执行一段用户设定的程序。在 LINUX 下,只有 reboot 和 halt 命令可以回到实模式,但是,它们是用途固定的,用户不能控制进入实模式之后的其它行为,例如在进入实模式后想立即执行 grub 的 stage2,这是不行的。
因此,在 DOS 下,我选择了对 DOS 进行 HACK 的方法,将 GRUB FOR DOS 予以实现。HACK 的目的是恢复 DOS 所修改了的 BIOS 中断向量。
这次不像在 LINUX 那样。因为在实模式的 DOS 下,我们可以进行任何编程,不会受到限制(这就是实模式的好处)。而 LINUX 和 Windows 的环境,是有很多限制的,它们都用到 CPU 的保护模式,拒绝执行某些指令,它们都没有已知的系统调用,来回到实模式,因此,在这些操作系统之上,都无法运行 grub 的 boot 命令。
GRUB 的 boot 命令可以引导任意的操作系统,引导这些操作系统所必须的一个条件是,CPU 处于实模式。因为历史上所有的操作系统都是设计成从实模式下启动的。电脑一开机就处于实模式的 CPU 状态。
因为对 DOS 进行了 HACK,所以,GRUB 能够在 DOS 下运行。这使得 GRUB for DOS 大概是(目前)唯一一个可以从某个操作系统(本例是从 DOS 命令行)内部来启动运行、并能引导任何操作系统的多重引导管理器。通常的情况是,当一个操作系统启动完成之后,就不能进入到另外一个操作系统了(除非重新启动机器)。【这里说的是”真实机器”的情况,不包括”虚拟机”里面的”操作系统”。】
====== 在 2003-10-19 2:26:51 您来信中写道: ======
我想问一下,GRUB for Linux可以在纯Linux甚至X-Window的Linux窗口(Linux termin)下本地运行,而且可以随时用quit命令退出GRUB而回到Linux命令行下,那为什么不如真正使用DOS下的编译器来将GRUB移植到DOS环境下,成为一个本地化的DOS软件而提高兼容性和适应性呢?
=====================================
确实,在决定开发 grub for dos 之前,我曾经在 http://www.google.com/ 上搜索 grub.exe, 搜索到了有关的网页,但有些关键的网页打不开,想用 GOOGLE 的网页缓存,这个,在中国大陆已经被禁止了,所以很多珍贵的资料不能见到。
但是也搜索到了少数有关 grub.exe 的网页,这些都是 GNU GRUB 的 bug 跟踪网页,是一些信件。从这些信件中略微知道 grub for dos 这个目标曾经有人努力去做过,但是,似乎觉得没有了下文。其中也有人指出,用 gnu grub 在 DOS/Windows 平台进行直接编译的问题。但是,好像没有人去直接编译,或者也可能是虽然编译了,但未成功。
当我进一步考虑这个问题的时候,我发现,即使编译成功,也没有太大意义。为什么呢?看看 Linux 下的 grub shell 就知道了。这个 GRUB SHELL 只能用来安装 GRUB,测试 GRUB 的一些命令,但是不能用来从 LINUX 下直接 boot 到另外一个操作系统。几乎所有的 GRUB 命令,都可以在 LINUX 的 GRUB SHELL 下执行,但 boot 命令除外。试想,如果像这样来实现 GRUB for DOS ,那有什么意义呢?
Linux 下之所以不能用 GRUB 的 boot 命令,最根本的原因是,在 Linux 下无法回到实模式并执行一段用户设定的程序。在 LINUX 下,只有 reboot 和 halt 命令可以回到实模式,但是,它们是用途固定的,用户不能控制进入实模式之后的其它行为,例如在进入实模式后想立即执行 grub 的 stage2,这是不行的。
因此,在 DOS 下,我选择了对 DOS 进行 HACK 的方法,将 GRUB FOR DOS 予以实现。HACK 的目的是恢复 DOS 所修改了的 BIOS 中断向量。
这次不像在 LINUX 那样。因为在实模式的 DOS 下,我们可以进行任何编程,不会受到限制(这就是实模式的好处)。而 LINUX 和 Windows 的环境,是有很多限制的,它们都用到 CPU 的保护模式,拒绝执行某些指令,它们都没有已知的系统调用,来回到实模式,因此,在这些操作系统之上,都无法运行 grub 的 boot 命令。
GRUB 的 boot 命令可以引导任意的操作系统,引导这些操作系统所必须的一个条件是,CPU 处于实模式。因为历史上所有的操作系统都是设计成从实模式下启动的。电脑一开机就处于实模式的 CPU 状态。
因为对 DOS 进行了 HACK,所以,GRUB 能够在 DOS 下运行。这使得 GRUB for DOS 大概是(目前)唯一一个可以从某个操作系统(本例是从 DOS 命令行)内部来启动运行、并能引导任何操作系统的多重引导管理器。通常的情况是,当一个操作系统启动完成之后,就不能进入到另外一个操作系统了(除非重新启动机器)。【这里说的是”真实机器”的情况,不包括”虚拟机”里面的”操作系统”。】
