|
好的,这个帖子中的测试,是个很好的资料。那么我就根据实验数据,说说相关的问题,并给出自己的分析。
GNU GRUB 官方网站上关于 uppermem 的描述是这样的:
https://www.gnu.org/software/grub/manual/legacy/uppermem.html
13.3.37 uppermem— Command: uppermem kbytes
Force GRUB to assume that only kbytes kilobytes of upper memoryare installed. Any system address range maps are discarded.
Caution: This should be used with great caution, and shouldonly be necessary on some old machines. GRUB's BIOS probe can pick upall ram on all new machines the author has ever heard of. It canalso be used for debugging purposes to lie to an OS.
uppermem 65536 就是欺骗操作系统,即,告诉操作系统说,只有 64M 的可用内存。
blank007 在测试中,再现了 gnu grub 0.97 需要 uppermem 命令这个事实。如下:
神舟优雅x4环境下,启用 qemu x64 (最多分配3G内存,所以分了3G) 测试优盘,情况有所不同。gnu grub 0.95 /0.97
执行:
kernel /boot/grub/memdisk c=173 h=4 s=36 floppy
initrd /boot/msdos/msdos.gz
提示错误,不能加载 msdos.gz 。
执行:
uppermem 65536
kernel /boot/grub/memdisk c=173 h=4 s=36 floppy
initrd /boot/msdos/msdos.gz
正常进入DOS。
而 grub4dos 没有 uppermem 命令,但在同样的条件下执行同样的命令
kernel /boot/grub/memdisk c=173 h=4 s=36 floppy
initrd /boot/msdos/msdos.gz
却不是失败,而是成功。
失败的原因在哪里? blank007 没有详说,但应该是 initrd 命令失败了。
也就是说,这不是 DOS 不能处理大内存的问题,因为 grub4dos 给它 3G 内存,DOS 也认了,没有死机。
也不是 memdisk 不支持大内存的问题,因为 grub4dos 加载 memdisk,而 memdisk 又把 msdos.gz 加载在 3G 内存顶部,也成功了,没死机。
因此,只可能是 grub0.97 的 initrd 在加载 msdos.gz 到内存时失败了。这是 grub 0.97 的 bug,而 grub4dos 早已修复此 bug,所以 grub4dos 的 initrd 命令不存在问题。
以上测试又是在 qemu 中进行的,因此,与具体硬件无关。也就是说,是旧版 grub 0.97 中的 initrd 命令的局限性造成的,很可能是这条命令本身不支持大于 2G 的内存。
在测试所涉及到的范围内,无论 memdisk 还是 DOS,都没出现不适应大内存的问题。
也就是说,所测试的 DOS 映像文件,根本不需要 uppermem 命令。
|
|