无忧启动论坛

标题: grub4dos引导memtest86+,提示cannot fit into memory [打印本页]

作者: ccontion    时间: 2012-7-29 04:05
标题: grub4dos引导memtest86+,提示cannot fit into memory
最近玩游戏偶尔会死机,整个系统毫无反应、鼠标完全定住的那种死法。在基本排除是其它部件的问题的前提下,怀疑是内存有问题,于是找出了很久没用的memtest86 v4.0a和memtest86+ v4.20。

机器是775平台的4核,内存是2G DDR2 800×4,对称安装到DIMM1、DIMM3和DIMM2、DIMM4。
硬盘的mbr为win7的bootmgr,通过bootmgr引导grub4dos的grldr.mbr。
grub4dos试了俩版本,一个是0.4.6a-2012-06-19,另一个是0.4.5c-2012-06-19。
无论哪个版本,都无法启动内存测试。


  1. title Windows Memory Diagnostic
  2. find --set-root /grub/windiag
  3. chainloader /grub/windiag
复制代码

这个可以正常工作,不过可惜微软的WMD只能检测4G内存。


  1. title Memtest86 4.0a
  2. find --set-root /grub/memtest.bin
  3. kernel /grub/memtest.bin
复制代码

这个“memtest.bin”就是“memtest86-4.0a.iso”中的“/ISOLINUX/MEMTEST”。路径全对,grub4dos也找到了文件(未找到文件会有提示),但启动时总是提示“selected item cannot fit into memory”。


  1. title Memtest86+ 4.20
  2. find --set-root /grub/memtest86+-4.20.bin.gz
  3. kernel /grub/memtest86+-4.20.bin.gz
复制代码

这个“memtest86+-4.20.bin.gz”来源于memtest86+的官方网站,无论是直接使用gz,还是解压为“memtest86+-4.20.bin”再引导,都提示“selected item cannot fit into memory”。


另外,还试了如下引导:
  1. title Memtest86+ 4.20
  2. find --set-root /grub/mt420.iso
  3. map /grub/mt420.iso (0xff) || map --mem /grub/mt420.iso (0xff)
  4. map --hook
  5. chainloader (0xff)
复制代码

Memtest86+的蓝色界面能出得来,但是不完整,尚未开始内存测试就死机了。


请问诸位,这到底要如何解决啊?其实我这台机器以前是跑过memtest86+ v4.10的(用grub4dos引导memtest86+的ISO),但是当时的grub4dos版本找不到了……

[ 本帖最后由 ccontion 于 2012-7-29 04:07 编辑 ]
作者: 不点    时间: 2012-7-29 08:51
grub4dos 启动后,屏幕顶行显示的常规内存是不是不多了?

这个问题是老问题了,目前无解。

其根本的原因在于 memtest 采用了旧版的 Linux 内核,必须占用固定内存 0x90000。一旦主板由于 PXE 启动而占用较多内存,便会发生内存冲突。新版 grub4dos 会检测内存,如果不够用(即,内存将要发生冲突),则拒绝加载这个旧版的 Linux 内核。

唯一的解决办法是敦促 memtest 的开发者采用新版 Linux 内核,放弃旧版 Linux 内核。
作者: fujianabc    时间: 2012-7-29 16:32
这个问题我也碰到过,后来使用了纯dos版的memtest。

memtest86+关网有纯dos版exe下载,在dos下直接执行,而不用linux内核方式加载
http://www.memtest.org/download/4.20/memtest86+-4.20.exe.zip
作者: ccontion    时间: 2012-7-30 11:08
标题: 回复 #2 不点 的帖子
在顶楼所提到的机器上,无论是win7的bootmgr启动的grub4dos,还是从fat32分区的u盘的mbr启动的,剩余基本内存都显示为598K。

另,我的网卡确实支持pxe功能,但是我没有启动它呀,这也会占这个所谓640K的基本内存的一部分么?
作者: ccontion    时间: 2012-7-30 11:09
标题: 回复 #3 fujianabc 的帖子
这个办法我也想到过,但是16位或32位的DOS程序能访问超过4G内存么?
作者: ccontion    时间: 2012-7-30 11:12
唉,搞了半天,还是用syslinux启动成功了……
  1. DEFAULT memtest

  2. LABEL memtest
  3.     kernel /grub/memtest.bin

  4. PROMPT 0
  5. TIMEOUT 0
复制代码

[ 本帖最后由 ccontion 于 2012-7-30 12:01 编辑 ]
作者: 不点    时间: 2012-7-30 11:18
常规内存总共有 640K,减去 598K,等于 42K。这 42K 是被你的扩展 BIOS 数据区占用了吗?感觉不太可能。因为一般来说,扩展 BIOS 数据区最多只占据 4K 空间,这个 42K 的占用,显得不可能。这是什么品牌的主板?生产日期?

补充:如果没有时间去做这些事情、了解其原委,那么也可以不再追究。只要有自己的解决办法就好。多元化的世界,每个软件都有自己的功能和用途,互相不可代替。

[ 本帖最后由 不点 于 2012-7-30 11:41 编辑 ]
作者: 不点    时间: 2012-7-30 11:28
标题: 回复 #6 ccontion 的帖子
你这个加载方法,似乎根本没把 memtest.bin 当作 Linux 内核来加载。难道说这个 memtest.bin 不是 Linux 内核格式?如果不是的话,自然无法成功用 grub4dos 的 kernel 命令来加载它。
作者: ccontion    时间: 2012-7-30 12:01
原帖由 不点 于 2012-7-30 11:28 发表
你这个加载方法,似乎根本没把 memtest.bin 当作 Linux 内核来加载。难道说这个 memtest.bin 不是 Linux 内核格式?如果不是的话,自然无法成功用 grub4dos 的 kernel 命令来加载它。


呵呵,是我搞错了,自然是用kernel命令来加载了,那个回复中写错了~~
作者: ccontion    时间: 2012-7-30 12:06
原帖由 不点 于 2012-7-30 11:18 发表
常规内存总共有 640K,减去 598K,等于 42K。这 42K 是被你的扩展 BIOS 数据区占用了吗?感觉不太可能。因为一般来说,扩展 BIOS 数据区最多只占据 4K 空间,这个 42K 的占用,显得不可能。这是什么品牌的主板? ...


主板是ASUS P5Q Pro,Intel P45芯片组的,支持775 CPU的最后一代芯片组,BIOS日期是2009-02-13,已经是官方的最新BIOS了。
主板有ICH10R南桥,我的硬盘做了RAID的,不知道这个会不会使用基本内存?
作者: fujianabc    时间: 2012-7-30 15:04
原帖由 ccontion 于 2012-7-30 11:09 发表
这个办法我也想到过,但是16位或32位的DOS程序能访问超过4G内存么?

我用dos版的测过16G内存都没问题
作者: fujianabc    时间: 2012-7-30 15:07
原帖由 不点 于 2012-7-30 11:18 发表
常规内存总共有 640K,减去 598K,等于 42K。这 42K 是被你的扩展 BIOS 数据区占用了吗?感觉不太可能。因为一般来说,扩展 BIOS 数据区最多只占据 4K 空间,这个 42K 的占用,显得不可能。这是什么品牌的主板? ...

我已经碰到过很多机器可用常规内存不足610K的了,尤其是那些UEFI主板的bios模式。估计都是被一些驱动(比如usb驱动,raid驱动)给占掉了。
作者: ccontion    时间: 2012-7-30 15:39
原帖由 fujianabc 于 2012-7-30 15:04 发表
我用dos版的测过16G内存都没问题


原来是这样啊,受教了。你的实时DOS模式是如何建立的啊?是不是用grub4dos引导一张软盘,类似这样的:
  1. map --mem /grub/msdos71.img (fd0)
  2. map --hook
  3. chainloader (fd0)+1
  4. rootnoverify (fd0)
复制代码


我想问的是,这张软盘的config.sys如何编写?himem和emm386要加载么?我刚才试了一下,同样的机器,用grub4dos和grub24dos都是因为基本内存不足无法启动memtest86+ 4.20,dos版一启动还没测试死机,但是syslinux可以。
作者: fujianabc    时间: 2012-7-30 16:43
原帖由 ccontion 于 2012-7-30 15:39 发表


原来是这样啊,受教了。你的实时DOS模式是如何建立的啊?是不是用grub4dos引导一张软盘,类似这样的:
map --mem /grub/msdos71.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

我想 ...

纯dos神马config.sys都不要加载。。。

我的dos是直接硬盘启动的,没有虚拟软驱
作者: 不点    时间: 2012-7-30 17:11
原帖由 ccontion 于 2012-7-30 12:06 发表


主板是ASUS P5Q Pro,Intel P45芯片组的,支持775 CPU的最后一代芯片组,BIOS日期是2009-02-13,已经是官方的最新BIOS了。
主板有ICH10R南桥,我的硬盘做了RAID的,不知道这个会不会使用基本内存?


明白了,感谢。

我猜有可能是 RAID 占用了常规内存。

算了,没必要弄得太清楚。如果实在想弄清楚,可以用 grub4dos 下的 displaymem 命令显示内存布局,或许可以揭示出一些深层的东西。

grub4dos 启动现在的新 Linux 内核没问题,也就是不错的了。

常规内存的使用越来越紧张了,旧式 Linux 内核终有遇到麻烦而无法使用的时候。

再次谢谢诸位提供信息。
作者: fujianabc    时间: 2012-7-30 19:33
原帖由 不点 于 2012-7-30 17:11 发表


明白了,感谢。

我猜有可能是 RAID 占用了常规内存。

算了,没必要弄得太清楚。如果实在想弄清楚,可以用 grub4dos 下的 displaymem 命令显示内存布局,或许可以揭示出一些深层的东西。

grub4dos  ...

估计可能是很多厂商为了淘汰bios+实模式故意让常规内存越来越紧张,使得很多dos或者实模式程序不能运行,直至最终普及UEFI。

像我现在的笔记本,有UEFI和bios两种模式,但实模式下常规内存只有576K
作者: ccontion    时间: 2012-7-30 21:28
原帖由 不点 于 2012-7-30 17:11 发表

明白了,感谢。

我猜有可能是 RAID 占用了常规内存。

算了,没必要弄得太清楚。如果实在想弄清楚,可以用 grub4dos 下的 displaymem 命令显示内存布局,或许可以揭示出一些深层的东西。

grub4dos  ...


非常感谢兄台,现在问题基本确认了,就是低位内存不足导致的,我用grub2引导的时候出现了如下更详细的提示:
  1. too small lower memory (0x99100 > 0x95800).
复制代码
这个0x95800等于我前面帖子提到的598KB。看来运行memtest86至少需要612KB的低位内存。
可是令我无法理解的是,相同的机器,相同的低位内存大小,为什么syslinux可以顺利引导memtest86+呢?
  1. DEFAULT memtest

  2. LABEL memtest

  3.     kernel /grub/memtest.bin

  4. PROMPT 0

  5. TIMEOUT 0
复制代码

[ 本帖最后由 ccontion 于 2012-7-30 21:33 编辑 ]
作者: ccontion    时间: 2012-7-30 21:30
原帖由 fujianabc 于 2012-7-30 16:43 发表

纯dos神马config.sys都不要加载。。。

我的dos是直接硬盘启动的,没有虚拟软驱


我的硬盘分区全部是ntfs,grub4dos如何直接引导实模式dos并运行mt420.exe啊?

[ 本帖最后由 ccontion 于 2012-7-30 21:34 编辑 ]
作者: sunsea    时间: 2012-7-30 21:33
原帖由 ccontion 于 2012-7-30 21:28 发表


非常感谢兄台,现在问题基本确认了,就是低位内存不足导致的,我用grub2引导的时候出现了如下更详细的提示:

too small lower memory (0x99100 > 0x95800).

这个0x95800等于我前面帖子提到的598KB。看 ...


现在是不是可以临时利用map --int15nolow=1空出INT13、INT15程序占用的12K空间来释放常规内存?
作者: sunsea    时间: 2012-7-30 21:35
原帖由 fujianabc 于 2012-7-30 19:33 发表

估计可能是很多厂商为了淘汰bios+实模式故意让常规内存越来越紧张,使得很多dos或者实模式程序不能运行,直至最终普及UEFI。

像我现在的笔记本,有UEFI和bios两种模式,但实模式下常规内存只有576K

看来有必要适时地向UEFI方向发展了!
还有
如果不是遇到非常Buggy的BIOS外,常规内存应该不会低于512K。
因为MS的实模式引导程序(例如BOOTMGR)必须被支持(否则一定会淹死在用户的口水之中),而MS的实模式引导程序至少需要(如果没记错的话)512K的常规内存。
如果某BIOS连Win7都无法启动的话(现在Win7还不算过时吧?厂商有必要支持吧?),厂商肯定会被骂死。

[ 本帖最后由 2011czmxbb52 于 2012-7-30 21:41 编辑 ]
作者: ccontion    时间: 2012-7-30 21:35
原帖由 2011czmxbb52 于 2012-7-30 21:33 发表
现在是不是可以临时利用map --int15nolow=1空出INT13、INT15程序占用的12K空间来释放常规内存?


感谢兄台提供信息,不过再加上12K貌似也不够,598+12=610,还少了一点点……今天太晚了,看奥运去了,明天试试……
作者: 不点    时间: 2012-7-30 21:48
原帖由 ccontion 于 2012-7-30 21:28 发表


非常感谢兄台,现在问题基本确认了,就是低位内存不足导致的,我用grub2引导的时候出现了如下更详细的提示:too small lower memory (0x99100 > 0x95800).这个0x95800等于我前面帖子提到的598KB。

看来运行memtest86至少需要612KB的低位内存。
可是令我无法理解的是,相同的机器,相同的低位内存大小,为什么syslinux可以顺利引导memtest86+呢?


恕我直言,你不要以为 syslinux 能够运行这个 memtest,就以为 syslinux “没错”、“最好”。

恰恰相反,syslinux 未能检测到内存冲突,即,在内存已经发生冲突的情况下盲目地、强行地启动 Linux 内核,这反映了 syslinux 在这方面的缺陷、不足。正确的做法本来就应该是拒绝启动。而这个 Linux 内核能够启动而不发生死机,应该说是运气。只要它去启动这个 Linux,这就是错误。不能以启动以后是否死机而论 “英雄”(不以成败论英雄)。有时候,内存冲突已经发生,但还没有导致死机,而是处于潜在的危险状态,随时都可能发生死机。比如,当进入保护模式的操作系统以后,由于 RAID 的常规内存代码或数据被破坏,那么,保护模式的操作系统有可能得到错误的信息,从而产生死机或者其他莫名其妙的问题。
作者: ccontion    时间: 2012-7-30 23:29
原帖由 不点 于 2012-7-30 21:48 发表
恕我直言,你不要以为 syslinux 能够运行这个 memtest,就以为 syslinux “没错”、“最好”。

恰恰相反,syslinux 未能检测到内存冲突,即,在内存已经发生冲突的情况下盲目地、强行地启动 Linux 内核, ...


呃,兄台言重了,我可没有认为syslinux比grub4dos更好,我只是困惑而已……
作者: 不点    时间: 2012-7-30 23:37
标题: 回复 #23 ccontion 的帖子
是你提供的 grub2 的信息,让我坚信当初 grub4dos 也进行内存检查的这一做法是正确的。如果你不提供 grub2 的信息,我还不太确定。总之,在各位的共同努力之下,这个问题也就彻底明确了,不再有含糊之处。庆祝一下。

另外需要澄清一点:syslinux 有很多优点是别的软件不具有的。不能因为 syslinux 犯下一个错误,就否认 syslinux 的优秀。syslinux 与 grub2 和 grub4dos 一样,都是不可代替的。

[ 本帖最后由 不点 于 2012-7-30 23:51 编辑 ]
作者: fujianabc    时间: 2012-7-31 15:20
原帖由 2011czmxbb52 于 2012-7-30 21:35 发表

看来有必要适时地向UEFI方向发展了!
还有
如果不是遇到非常Buggy的BIOS外,常规内存应该不会低于512K。
因为MS的实模式引导程序(例如BOOTMGR)必须被支持(否则一定会淹死在用户的口水之中),而MS的实模 ...

512K基本内存肯定会保证的,否则nt系统都启动不了,那此主板就是不合格产品了
作者: 一只猴子    时间: 2012-7-31 15:50
标题: 回复 #20 2011czmxbb52 的帖子
BOOTMGT解压后的大小也是512KB。。
作者: sunsea    时间: 2012-7-31 17:24
原帖由 fujianabc 于 2012-7-31 15:20 发表

512K基本内存肯定会保证的,否则nt系统都启动不了,那此主板就是不合格产品了


这种BUG环境是一定要适应下!!以后这种恶劣环境会与来越多的!!
有个建议
据说当286及以后CPU的第21根地址线(a20)启动后,紧挨着前1024K内存的第一个64K区段也可以被实模式的程序(通过第20根地址线a19)直接访问,即实模式程序可访问多达1088K内存。只是这64K内存不能拆分开,所以完全可以把一些东西(比如INT13、INT15的12K代码放进去),这样可以节省很多常规内存,又可以让INT13和INT15看上去不像hook过。
还有比如现在大家都用VGA了,那么保留区里划分给单显(HGA)使用的16K内存,现在完全可以拿出来充进GRUB4DOS使用的内存范围(正好够放INT13、INT15的代码)
但是1024-1088K区段使用他有个风险
就是一般的DOS会把command.com放到这里
可能我们的代码就会被DOS破坏
因此还是放到HGA区域里比较好
还有,EMS的64K空间,只要不进DOS,都可以去占用
原话在这里:http://www.cn-dos.net/forum/viewthread.php?tid=8212&fpage=1

[ 本帖最后由 2011czmxbb52 于 2012-7-31 17:42 编辑 ]
作者: fujianabc    时间: 2012-7-31 23:39
原帖由 2011czmxbb52 于 2012-7-31 17:24 发表


这种BUG环境是一定要适应下!!以后这种恶劣环境会与来越多的!!
有个建议
据说当286及以后CPU的第21根地址线(a20)启动后,紧挨着前1024K内存的第一个64K区段也可以被实模式的程序(通过第20根地址线a19 ...

过两年或许有机器连dos都不能正常运行了
作者: 不点    时间: 2012-8-2 22:53
引述网上关于 UEFI 的意见,供参考。有了下面这个评论,我个人就完全可以确定,UEFI 实际上是针对开源社区的是一个恶意的规范。和往常一样,我当然不干涉别人的思想、逻辑和看法,谁愿意持有什么观点,那是他自己的事。

http://it.solidot.org/article.pl?sid=12/07/20/099207
                        
                        RMS评论UEFI                                          

blackhat  发表于 2012年7月20日 17时05分 星期五                                                                                                                       
来自不自由毋宁死部门        

Shawn the R0ck 写道:

  UEFI 所谓的 "安全boot" 机制非常脆弱,UEFI本身对于GNU/Linux 社区是非常具有敌意的,但 Fedora 和 Ubuntu 也都打算在这个事情上有所妥协。自由软件基金会的主席Richard Stallman终于就这个问题发表了意见。他谈到如果用户不自己控制钥匙就意味着被带上某种枷锁,这无所谓对于任何的操作系统,微软要求 Windows 8 的 ARM 电脑都无法修改启动选项,换句话说,微软把整个 boot 过程都限制住了。Stallman 认为所谓的 secure boot 并不是一个安全特性,而是对于用户权力的侵犯,这种行为应该是违法的。




顺便转贴另一个相关的链接:

对 EFI / UEFI 的反击:AMD 未来所有处理器都将支持 Coreboot
http://bbs.icpcw.com/thread-2082250-1-1.html


[ 本帖最后由 不点 于 2012-8-2 23:29 编辑 ]




欢迎光临 无忧启动论坛 (http://bbs.wuyou.net/) Powered by Discuz! X3.3