无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站投放广告、加入VIP会员,请联系 微信:wuyouceo
查看: 6590|回复: 28
打印 上一主题 下一主题

[求助] 老机+新版Grub4DOS引导问题(实机测试+拍照)

[复制链接]
跳转到指定楼层
1#
发表于 2012-9-10 09:47:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
话说grub4dos在09年学习了后一直未在更新学习新版。这几天心血来潮想换换新版实验下一台N年前的老机一直老当益壮也没升级。结果一下子悲剧了。新版grub4dos-0.4.5c-2012-06-18.7z   grub4dos-0.4.6c-2012-06-19.7z 居然都不支持。

而原来的老版本0.4.4 2009 6 20版本却是好好的。

问题很简单。一个u盘dos引导grub.exe 一个移动硬盘MBR的grldr.mbr引导grldr。

引导菜单也是官方推荐的:

title Boot Windows NT/2K/XP
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

结果在实机上测试结果简直大跌眼镜啊。0.4.4. 非常顺利启动xp,   0.4.5c  /  0.4.6c 最新版全部失败。都是可以启动到xp的滚动画面然后转几圈画面就在也不进入系统了,硬盘灯完全不闪烁。等了几分钟也无反映,也就是卡死了。

不知道什么原因。

6张实机测试图。3张移动硬盘图(grldr启动)+3张U盘图(dos引导gurb.exe)


可以看到实机测试map命令磁盘仿真交换均成功,而且也都引导了xp,但是就是新版就是引导到xp的转圈画面之后就死掉了。老版则什么问题都没有顺利启动。为了对照,我是直接命令行测试。请注意图上的版本。手机拍照比较大,做了些切图。

请开发者看看是什么原因吧。








前面三张照片是移动硬盘+实机硬盘的测试情况。bios把移动硬盘设置为引导启动盘,并且被识别为第一硬盘hd0,就一个分区(hd0,0),另一个硬盘一个主分区(hd1,0),一个逻辑分区(hd1,4)也是明显看的出来的。

命令测试全部一样。

grub4dos-0.4.5c-2012-06-18 / grub4dos-0.4.6c-2012-06-19 最新版 测试全部失败,卡在xp的引导圈圈之后。都是可以启动到xp的滚动画面然后转几圈画面就在也不进入系统了,硬盘灯完全不闪烁。等了几分钟也无反映,也就是卡死了。


0.4.4 2009 6.20 版本成功,也是一直在用的版本。









这三张图片是在前面的基础上家了u盘,bios设置为第一启动。一个三个:u盘,移动硬盘,测试机硬盘



grub4dos-0.4.5c-2012-06-18 / grub4dos-0.4.6c-2012-06-19 最新版 测试全部失败,卡在xp的引导圈圈之后。都是可以启动到xp的滚动画面然后转几圈画面就在也不进入系统了,硬盘灯完全不闪烁。等了几分钟也无反映,也就是卡死了。


0.4.4 2009 6.20 版本成功,也是一直在用的版本。




另外:新版0.4.5c  /  0.4.6c显示了很多(fd0,1) (fd0,2) (fd0,3)等等是不是预先读取了menu.lst菜单里面的img并显示有仿真磁盘??  0.4.4的没有显示这些。

[ 本帖最后由 compass 于 2012-9-10 10:06 编辑 ]
2#
发表于 2012-9-10 10:29:46 | 只看该作者
贴图、报告问题很辛苦。谢谢。

看到你报告中的 “ dos引导grub.exe ”的字眼了,因此,怀疑这里有问题。

请你先不要进入 DOS 来测试,看看是否有同样的问题。DOS 以及 TSR 程序破坏中断向量表,添加了不确定因素,所以,首先要确定这是否正是导致问题的原因。就是说,直接以 GRLDR 进入 grub 环境来测试,不要有 DOS 的运行,不要以任何方式使用 DOS。

然后再报告一下,你的 DOS 中加载了哪些驱动程序。贴出 config.sys 以及 autoexec.bat 的内容。

最后再说说你的主板型号,生产厂家,生产日期。
回复

使用道具 举报

3#
 楼主| 发表于 2012-9-10 10:40:39 | 只看该作者
哦,不点老师来了啊。感谢。

是这样。多年的一个U盘,很小128M。所以,只用的是dos引导。U盘格成dos引导。

config.sys

[menu]
menuitem=GRUB,Boot GRUB to Start Windows PE
menuitem=NOCD1,Boot Without CD-ROM Support.                   [UMBPCI+RealMode]
menuitem=IDE_SATA_CD1,Boot With IDE/SATA CD-ROM Support.             [UMBPCI+RealMode]
menuitem=SCSI_USB_CD1,Boot With SCSI/USB CD-ROM And USB Support.     [UMBPCI+RealMode]
menuitem=PCMCIA_CD1,Boot With PCMCIA CD-ROM And USB Support.       [UMBPCI+RealMode]
menuitem=1394_CD1,Boot With 1394-Firewire CD-ROM And USB Support.[UMBPCI+RealMode]
SUBMENU=1,Boot With EMM386 (NOEMS).                      [EMM386+Protected Mode]
menudefault=NOCD1,20
menucolor=7,0

[1]
menuitem=NOCD2,Boot Without CD-ROM Support.                   [EMM386+Protected Mode]
menuitem=IDE_SATA_CD2,Boot With IDE/SATA CD-ROM Support.             [EMM386+Protected Mode]
menuitem=SCSI_USB_CD2,Boot With SCSI/USB CD-ROM And USB Support.     [EMM386+Protected Mode]
menuitem=PCMCIA_CD2,Boot With PCMCIA CD-ROM And USB Support.       [EMM386+Protected Mode]
menuitem=1394_CD2,Boot With 1394-Firewire CD-ROM And USB Support.[EMM386+Protected Mode]
menudefault=NOCD2,20
menucolor=7,0
...
...
...
...
[GRUB]
DEVICE=dos\HIMEM.SYS /TESTMEM:OFF


[COMMON]
SHELL=COMMAND.COM /P /E:1024
DOS=HIGH,UMB,AUTO
FCBSHIGH=8,0
FILESHIGH=30
BUFFERSHIGH=30,0
STACKSHIGH=9,256
LASTDRIVEHIGH=Z




autoexec.bat


SET RAMD=R:
if "%comspec%"=="C:\COMMAND.COM" set SysDrive=C:
if "%comspec%"=="A:\COMMAND.COM" set SysDrive=A:

REM 在内存中虚拟5M的磁盘空间
%SysDrive%\dos\xmsdsk.exe 5020   %RAMD% /y /t >NUL
copy %SysDrive%\DOS\COMMAND.COM  %RAMD%       >NUL
copy %SysDrive%\dos\extract.exe  %RAMD%       >NUL

MD %RAMD%\temp
SET temp=%RAMD%\temp
SET tmp=%RAMD%\temp

PATH=%SysDrive%\;%SysDrive%\dos;%SysDrive%\dos\menu;%SysDrive%\dos\tw;%SysDrive%\dos\ghost;%SysDrive%\dos\diskgen;%RAMD%

IF "%config%"=="NOCD1"                    GOTO COMMON
IF "%config%"=="NOCD2"                    GOTO COMMON
IF "%config%"=="IDE_SATA_CD1"             GOTO IDE_SATA_CD
IF "%config%"=="IDE_SATA_CD2"             GOTO IDE_SATA_CD
IF "%config%"=="SCSI_USB_CD1"             GOTO SCSI_USB_CD
IF "%config%"=="SCSI_USB_CD1"             GOTO SCSI_USB_CD
IF "%config%"=="1394_CD1"                 GOTO 1394_CD
IF "%config%"=="1394_CD2"                 GOTO 1394_CD
IF "%config%"=="PCMCIA_CD1"               GOTO PCMCIA_CD
IF "%config%"=="PCMCIA_CD2"               GOTO PCMCIA_CD
IF "%config%"=="GRUB"                     GOTO GRUB


...
...
...


:GRUB
%SysDrive%\boot\grub\GRUB.EXE --config-file=(fd0)/boot/grub/menu.lst

[ 本帖最后由 compass 于 2012-9-10 10:41 编辑 ]
回复

使用道具 举报

4#
 楼主| 发表于 2012-9-10 10:45:01 | 只看该作者
最后再说说你的主板型号,生产厂家,生产日期。
===========
非常老的主板  P4R800-VM  华硕 2003年
回复

使用道具 举报

5#
 楼主| 发表于 2012-9-10 10:50:02 | 只看该作者
看到你报告中的 “ dos引导grub.exe ”的字眼了,因此,怀疑这里有问题。
============
不点老师,我第一次测试的时候是没有用到u盘dos系统的。

第一次测试就是移动硬盘,用BOOTICE.EXE 工具将主引导分记录设置为grldr.mbr
把grldr文件丢在移动硬盘根目录下。 新版的grldr就是无法引导xp系统,只能引导到转圈圈之后就死掉了。0.4.4的grldr没有问题。

后面的测试的时候才加上U盘用dos启动。因为主板非常老,所以保留了一个U盘的DOS系统。一直用的非常好。0..4.4.的grldr用的非常好,从没有问题。
回复

使用道具 举报

6#
发表于 2012-9-10 10:52:23 | 只看该作者
1、看到 DEVICE=dos\HIMEM.SYS 了,注意,如果是 FreeDOS,那么,它的 HIMEM 是有缺陷的,无法与 grub.exe 良好共处。如果是微软的 DOS 以及微软的 HIMEM,那么这是支持的,没有发现冲突报告。

2、看到如下的内容:

REM 在内存中虚拟5M的磁盘空间
%SysDrive%\dos\xmsdsk.exe 5020   %RAMD% /y /t >NUL

xmsdsk 有可能制造了问题。它很可能与旧版 grub.exe 碰巧兼容,但可能与新版不兼容。

一般来说,grub.exe 本来就不支持设备驱动程序、内存管理程序、TSR 程序(只有少数例外,例如微软的 HIMEM 和 EMM386 是可以被 GRUB.EXE 支持的)。所以,使用这些 TSR 本身就是有风险的。这类问题,都不属于 grub4dos 的问题,而是属于使用者的问题。
回复

使用道具 举报

7#
 楼主| 发表于 2012-9-10 10:56:15 | 只看该作者
可以看到前面三张图find命令结果:

(hd0,0)
(hd1,0)
(hd1,4)

这时候没有u盘加入测试的。就是测试硬盘+移动硬盘两个。
移动硬盘(hd0,0),测试硬盘主分区(hd1,0),逻辑分区(hd1,4)


手动测试命令:

find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr


结果:
grub4dos-0.4.5c-2012-06-18 / grub4dos-0.4.6c-2012-06-19 最新版 测试全部失败,卡在xp的引导圈圈之后。都是可以启动到xp的滚动画面然后转几圈画面就在也不进入系统了,硬盘灯完全不闪烁。等了几分钟也无反映,也就是卡死了。


0.4.4 2009 6.20 版本成功,也是一直在用的版本。
回复

使用道具 举报

8#
发表于 2012-9-10 10:57:35 | 只看该作者

回复 #5 compass 的帖子

你能否再确认一下,重新试验。

只更换 GRLDR,别的都不动,看看问题是否重现。注意启动的任何一个步骤,都不要有 DOS 接管控制的可能性。

贴出你的各种菜单和配置(例如 menu.lst,boot.ini 等),看看有无潜在的错误。
回复

使用道具 举报

9#
 楼主| 发表于 2012-9-10 11:00:20 | 只看该作者
原帖由 不点 于 2012-9-10 10:52 发表
1、看到 DEVICE=dos\HIMEM.SYS 了,注意,如果是 FreeDOS,那么,它的 HIMEM 是有缺陷的,无法与 grub.exe 良好共处。如果是微软的 DOS 以及微软的 HIMEM,那么这是支持的,没有发现冲突报告。

2、看到如下的 ...


1:是ms 的dos系统。
2:有可能吧。

不点老师先放放dos的问题。问题是我前三张测试图更dos一点关系都没有,是移动硬盘+测试硬盘,就是移动硬盘已经做了grldr.mbr  只是吧grldr丢盘根下,吧menu.lst丢在 boot/grub/ 下。就没dos。还是测试失败,这才是最不可理解的。
回复

使用道具 举报

10#
发表于 2012-9-10 11:04:42 | 只看该作者
不点只关注了grub.exe启动失败的情况,而人家报告的是:新版的grldr也存在同样的问题。所以,这跟什么DOS驱动关系不大。

我昨天在一台老acer笔记本上试验RamXP系统,在最后一步:chainloader /ntldr(这个ntldr在内存盘上)时,总是提示找不到文件。而我手工进入命令行,用同样的命令就可以正常启动。

而且,新版的grub4dos的savedefault命令似乎也不太正常了。经常无法将当前选项成功写入default文件。
回复

使用道具 举报

11#
 楼主| 发表于 2012-9-10 11:10:11 | 只看该作者
原帖由 不点 于 2012-9-10 10:57 发表
你能否再确认一下,重新试验。

只更换 GRLDR,别的都不动,看看问题是否重现。注意启动的任何一个步骤,都不要有 DOS 接管控制的可能性。

贴出你的各种菜单和配置(例如 menu.lst,boot.ini 等),看看有 ...


测试结果绝对真实。我也是不明白。

1:boot.ini没动。因为不喜欢动它。喜欢用U盘或移动硬盘直接引导。

2:置顶BOOTICE.EXE 对移动硬盘主引导做grldr.mbr  。grldr丢移动硬盘根目录。每次更新就还一个grldr,其他都没有动过。

3:menu.lst


color 11 12 13 14
pxe detect
timeout 60
default 2

title Boot Win7 PE
find --set-root /Boot/WinPE/win7.ISO
map ()/Boot/WinPE/win7.ISO (0xff) || map --mem ()/Boot/WinPE/win7.ISO (0xff)
map --hook
chainloader (0xff)

title Boot WinXP PE (Low  PC)
echo $[1106]Extract F6IMG_SRS disk driver Pack, booting Fast Winxp pe, please wait ...
command ()/boot/F6IMG/F6IMG ()/boot/F6IMG/SRS
map ()/boot/WinPE/NVXPPE.ISO (0xfa) || map --mem ()/boot/WinPE/NVXPPE.ISO (0xfa)
map ()/boot/WinPE/boot.iso (0xff) || map --mem ()/boot/WinPE/boot.iso (0xff)
map --e820cycles=3
map --hook
chainloader (0xff)/WXPE/SETUPLDR.BIN

title Boot WinXP PE (High PC)
echo $[1106]Extract DPMS disk driver Pack, booting Fast Winxp pe, please wait ...
find --set-root /boot/DPMS/DPMS.BAT && ()/boot/DPMS/DPMS.BAT
map ()/boot/WinPE/NVXPPE.ISO (0xfa) || map --mem ()/boot/WinPE/NVXPPE.ISO (0xfa)
map ()/boot/WinPE/boot.iso (0xff) || map --mem ()/boot/WinPE/boot.iso (0xff)
map --e820cycles=3
map --hook
chainloader (0xff)/WXPE/SETUPLDR.BIN

title ---------------------------
clear

title Boot DOS7.1 ToolsBox
find --set-root --ignore-floppies /boot/IMGS/MSDOS710.img
map ()/boot/IMGS/MSDOS710.IMG (fd0) || map --mem ()/boot/IMGS/MSDOS710.IMG (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title Boot MaxDOS ToolsBox
find --set-root --ignore-floppies /boot/IMGS/maxdos9.img
map ()/boot/IMGS/maxdos9.img (fd0) || map --mem ()/boot/IMGS/maxdos9.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title ---------------------------
clear

title Boot Ghost Disk Tools
find --set-root --ignore-floppies /boot/IMGS/ghost.img
map ()/boot/IMGS/ghost.img (fd0) || map --mem ()/boot/IMGS/ghost.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title Boot DiskGenius Disk Tools
find --set-root --ignore-floppies /boot/IMGS/DiskGenius.img
map ()/boot/IMGS/DiskGenius.img (fd0) || map --mem ()/boot/IMGS/DiskGenius.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title Boot Seagate Disk Diagnosis Tools
find --set-root --ignore-floppies /boot/IMGS/SeaTools.ima
map ()/boot/IMGS/SeaTools.ima (fd0) || map --mem ()/boot/IMGS/SeaTools.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

title ---------------------------
clear

title Boot Ubuntu Linux
rootnoverify (hd0,0)
kernel (hd0,0)/vmlinuz
initrd (hd0,0)/initrd boot

title Boot Windows 9x/Me
find --ignore-floppies --ignore-cd /io.sys
chainloader /io.sys

title Boot Windows NT/2K/XP
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

title Boot Windows Vista/Win7/Win8
find --set-root --ignore-floppies --ignore-cd /bootmgr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /bootmgr
chainloader /bootmgr

title Boot chenall's NTBOOT ToolsBox
find --set-root --ignore-floppies --ignore-cd /boot/IMGS/NTBoot.iso
map ()/boot/IMGS/NTBoot.iso (0xff) || map --mem ()/boot/IMGS/NTBoot.iso (0xff)
map --hook
chainloader (0xff)

title Boot the Recovery Console of Windows XP
echo $[1106]Extract F6IMG_SRS disk driver Pack, booting Fast Winxp pe, please wait ...
command ()/boot/F6IMG/F6IMG ()/boot/F6IMG/SRS
map ()/boot/IMGS/XPCMDCON.ISO (0xff) || map --mem ()/boot/IMGS/XPCMDCON.ISO (0xff)
map --hook
chainloader (0xff)

title ---------------------------
clear


title Boot Floppy
chainloader (fd0)+1
rootnoverify (fd0)

title Boot CD-ROM
cdrom --init
map --hook
root (cd0)
chainloader (cd0)
rootnoverify (cd0)

title ---------------------------
clear

title Back to DOS
quit

title ShutDown Computer
halt

title reboot Computer
reboot
回复

使用道具 举报

12#
发表于 2012-9-10 11:15:06 | 只看该作者

回复 #9 compass 的帖子

在执行 chainloader /ntldr 之前,先用 map --status 看看有无 map 项目存在。如果有,那么你在 map --rehook 之前增加 map --int15nolow=1 然后重新试验。

抱歉,刚才写错了,应该是 map --int15nolow=1 而不是 map --int15-nolow=1。

如果还是不行,就换用 map --e820cycles=0 (来代替 map --int15nolow=1 ),重新试验。

[ 本帖最后由 不点 于 2012-9-10 11:35 编辑 ]
回复

使用道具 举报

13#
 楼主| 发表于 2012-9-10 11:47:23 | 只看该作者
测试结果来了。你写要测试这个的时候map --e820cycles=0 的时候我已经去测试了。
map --status 测试的结果看不懂。反正,不管怎么样在map --rehook 之前增加 map --int15nolow=1的测试也实验过了。一样问题。还是可以引导xp的画面,但是就是转几圈后就不动了。硬盘灯不亮了。就卡死了。
回复

使用道具 举报

14#
 楼主| 发表于 2012-9-10 11:48:29 | 只看该作者
map --e820cycles=0 的测试等会了。我先去吃饭等会再来。
回复

使用道具 举报

15#
发表于 2012-9-10 11:56:09 | 只看该作者
注意 map --int15nolow=1 是在 map --rehook 之前。确认你没敲错命令。我觉得应该成功。

如果还是失败,那就不容易确定根源了。需要等待更进一步的报告,也许是别人的报告。
回复

使用道具 举报

16#
 楼主| 发表于 2012-9-10 12:18:48 | 只看该作者
测试成功。上图。确实可以解决xp转几圈圈之后继续,看到硬盘灯闪不不停就知道可以了,确实可以成功。


加入红色命令成功。
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --e820cycles=0
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr

黑色家重命令改为:
map --int15nolow=1
则失败。


问题是:难道新版都需要怎么改吗?

为什么老版本0.4.4不加入此命令就成功了呢?

请不点老师明示啊。



[ 本帖最后由 compass 于 2012-9-10 12:23 编辑 ]
回复

使用道具 举报

17#
发表于 2012-9-10 12:19:18 | 只看该作者
“可以引导xp的画面,但是就是转几圈后就不动了”
那说明基本内存是足够的(大于512kb),map --int15nolow=1应该也是无效的。
继续关注中,map --e820cycles=x(0=<x<=3)试试,注意在rehook前面运行。
回复

使用道具 举报

18#
 楼主| 发表于 2012-9-10 12:22:54 | 只看该作者
原帖由 zhaohj 于 2012-9-10 12:19 发表
“可以引导xp的画面,但是就是转几圈后就不动了”
那说明基本内存是足够的(大于512kb),map --int15nolow=1应该也是无效的。
继续关注中,map --e820cycles=x(0=


已经成功了。看上面的图。
回复

使用道具 举报

19#
 楼主| 发表于 2012-9-10 12:26:31 | 只看该作者
问题是为什么老版本就不加此命令直接成功啊,新版怎么会出现此怪问题啊。
回复

使用道具 举报

20#
 楼主| 发表于 2012-9-10 12:49:33 | 只看该作者
我刚才特意去搜索了官方提供的文档README_GRUB4DOS.txt
README_GRUB4DOS_CN.txt
里面没有对
map --int15nolow
map --e820cycles
一点都没有提供说明。
这样遇到问题,真的很难自己解决也很难对grub4dos发展起到帮助啊。
又特意到虚拟机查看了help map里面也没有对
--int15nolow
--e820cycles
参数的帮助,甚至都没有列出来。

这是黑命令吗?

遇到问题,自己调试连入手帮助资料都没有。grub4dos的帮助实在没弄好啊。

我要是不发贴,这个问题就没发解决。要是有个详细的文档说明,把调试手段步骤列出来,我自己就直接解决了。

像这样的
--int15nolow
--e820cycles
黑命令参数根本就不提供文档,真是无语啊。
回复

使用道具 举报

21#
发表于 2012-9-10 13:19:04 | 只看该作者
int15nolow下面有讨论:
http://bbs.wuyou.net/viewthread. ... highlight=%2Bzhaohj
-----------
论坛搜索e820cycles同样有讨论,而且更加广泛。

从目前的情况来看,map --e820cycles=-1默认的参数支持性并不广泛,反而map --e820cycles=3支持性更加多一点。

[ 本帖最后由 zhaohj 于 2012-9-10 13:27 编辑 ]
回复

使用道具 举报

22#
发表于 2012-9-10 13:24:00 | 只看该作者
很抱歉,文档中没说明这个问题。部分的原因是,本来就不太容易说明。

--e820cycles=0 控制 int15 是否由 grub4dos 接管。当 --e820cycles=0 时,grub4dos 不再接管 int15。

在版本 0.4.4 的时候,grub4dos 的 map 不支持 --e820cycles 参数,当不存在 --mem 的虚拟盘时,也不接管 int15。

在 0.4.5 以后,增加了 --e820cycles 参数。并且在默认时 --e820cycles=-1 (即负的1),要接管 int15。

从逻辑上讲,本来就应该接管 int15,因为内存被 int13 占据,就应该修改 int15 来通知操作系统,避免操作系统破坏掉 int13 的仿真代码空间。所以,默认时 --e820cycles=-1 是正确的。

然而有些 Windows 版本有 bug,它不喜欢 grub4dos 接管 int15,在某些硬件环境下它就会蓝屏死机。所以,我们才添加了一个控制变量 --e820cycles 让用户自己决定该如何处理。

肯定了,如果保持 0.4.4 的状态,不接管 int15,那么有些 Windows 版本就要蓝屏死机。


就是说,接管 int15 了,有死机的情况,不接管 int15,也有死机的情况。无法两全其美。

所以,才需要一个控制变量,根据用户的需要,由用户进行选择。


而默认时接管 int15,这是由于本来就应该这样,本来这就是正确的、符合逻辑的。

0.4.4 不接管 int15 的做法是错误的。但是,这种错误恰好迎合了某个 Windows 的需要,所以,0.4.4 在那种情况下是成功的。

用 --e820cycles=0 来模拟 0.4.4 的做法。

类似地,--int15nolow 是另外一个控制参数,有时候必须使用它。此处就不多说了。
回复

使用道具 举报

23#
 楼主| 发表于 2012-9-10 14:11:24 | 只看该作者
谢谢zhaohj 大元帅和不点老师指点。

有个疑问,不明白。

grub4dos 在0.4.5后加入磁盘仿真代码,为了保护这段代码的安全,所以grub4dos开始接管BIOS的int 15中断。但是某些操作系统也会在启动时候检测int 15中断来判断常规内存是否够用,否则就不启动黑屏蓝屏。是这样吗?

那这样一来,不是搞的即与主板有兼容性问题,也与os有兼容性问题了。

我的这个问题的老机器用的xp sp3,打上了最新补丁。自从09年用0.4.4的grub4dos之后一直没有更新,也没有学习grub4dos新的命令。所以一直相安无事。现在更新了grub4dos 0.4.5之后,

有问题,是因为xp要接管int 15发现grub4dos已经默认接管了int 15 所以黑屏了。还是xp接管int 15 发现常规内存不够,所以黑屏了。


还有--e820cycles=0知道了意思,那=1,2,3分别是何含义啊。

是这样吗?如果这样,那么应该有N多使用xp的老机在用新版grub4dos时如果用grub4dos引导xp启动的话要遇到问题,那么必然要大面积报告(当然,这也跟大部分人用的是别人集成好的东东问题已经被解决了有关),这样起码这样的事件的解决办法早就应该写入帮助吧。像我这样一下子3年不碰grub4dos的用户,更新一次新版,遇到问题肯定要翻官方帮助啊。怎么官方帮助文档一字不提这个问题呢?
而且这两个黑参数,就根本不知道。连信息都不知道,怎么搜索资料啊,是吧。要是不坚持来测试一下,那就用不了新版了。
回复

使用道具 举报

24#
 楼主| 发表于 2012-9-10 14:31:41 | 只看该作者
刚才用bios int15搜索发现一片文章,开头写道:
By far the best way to detect the memory of a PC is by using the INT 0x15, EAX = 0xE820 command. This function is available on all PCs built since 2002, and on most existing PCs before then. It is the only BIOS function that can detect memory areas above 4G. It is meant to be the ultimate memory detection BIOS function.

它说到目前为止用INT 0x15, EAX = 0xE820 命令是侦查内存的最好办法。既然这样,那gurb4dos继续接管下去不是问题多多吗?

不接管int15 又怕仿真磁盘代码被别人的程序kill掉,接管了又根os引起冲突。吧决定权交给用户,一般人谁知道这些东东啊。根本不会用啊。


不懂,把文章发来,老师们看看把。
BIOS_Function_INT_0x15.rar (4.99 KB, 下载次数: 15)

[ 本帖最后由 compass 于 2012-9-10 14:34 编辑 ]
回复

使用道具 举报

25#
发表于 2012-9-10 14:31:58 | 只看该作者
你的理解有错误,很难说清楚。

我想重复我前面的解释,这样也许你就清楚了:

无论 grub4dos 接管还是不接管 int15,都有死机的情况发生。你的情况属于 “ 不让 grub4dos 接管 int15 的类型 ”。还有别人的类型,刚好相反,即,如果 grub4dos 不接管 int15,则会发生蓝屏死机。所以,从 grub4dos 的角度,无论怎么做,都不可能同时照顾两者,只能给出一个选项,让用户自己视具体情况而定。

也就是说,0.4.4 在某个别的电脑上肯定会出问题的。只有 0.4.5 以后的版本才能较好地照顾两者,这是通过参数控制的手段来实现的。0.4.4 没有参数控制,所以,0.4.4 只能适应其中的一种情况(就是你所遇到的情况),不能对付另外一种(相反的)情况。

至于说如何写入帮助文档,那就得看 sratlf 和 chenall 了。我个人没有太多时间关注此事。

其实,如果你的旧版 grub4dos 用得很好,你倒是没必要更新到新版。grub4dos 是一个工具而已,只要管用,旧版一样好。只有当旧版出现问题时,才必须转到新版上来。

[ 本帖最后由 不点 于 2012-9-10 14:42 编辑 ]
回复

使用道具 举报

26#
 楼主| 发表于 2012-9-10 14:41:08 | 只看该作者
我的这个问题,是不是可以说xp sp3的系统在启动是要侦查int15,如果发现常规内存过小就不启动或是启动到一半就黑掉。那既然如此,发行包里提供的参考menu.lst文档就有问题了:

title find and load NTLDR of Windows NT/2K/XP\n find and load NTLDR of Windows NT/2K/XP
fallback 1
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr
savedefault --wait=2


新版本的grub4dos起码需要提示用户加map --e820cycles=0 ,windows xp 的系统啊不是要接管int 15吗?
title find and load NTLDR of Windows NT/2K/XP\n find and load NTLDR of Windows NT/2K/XP
fallback 1
find --set-root --ignore-floppies --ignore-cd /ntldr
map () (hd0)
map (hd0) ()
map --e820cycles=0
map --rehook
find --set-root --ignore-floppies --ignore-cd /ntldr
chainloader /ntldr
savedefault --wait=2
回复

使用道具 举报

27#
发表于 2012-9-10 14:45:25 | 只看该作者
我就是这样,一直用旧版,感觉也够用了。但如果长时间不接触新版,很多新功能就接触不到,过这么一段时间就感觉完全不熟悉grub4dos了。例如我现在看chenall写的BAT,几乎就跟看天书一样。(有个不情之请,chenall能不能把自己写的觉得最有技巧的BAT脚本给来个逐句注释版本啊?)

我觉得还是文档的更新没有跟上。像zhaohj给出的那个讨论帖子的内容,相当有参考意义,对于了解--int15nolow这个参数的了解来说是必需的。所以,这样有意义的帖子和讨论内容要专门整理出来,进入grub4dos的基础文档(我觉得很有必要在google文档上建立这么一个东西,由大家共同更新,之所以选google文档,是因为它目前来说足够稳定)。不能只整理帖子链接,因为我发觉无忧启动论坛正在飞速的走下坡路,这个论坛不知道还能存在多长时间。一旦这个论坛消失,很多有意义的东西就湮灭了。
回复

使用道具 举报

28#
发表于 2012-9-10 14:48:17 | 只看该作者
compass,你还是理解不到位。

默认时,int15 是应该被 grub4dos 接管的。请仔细阅读前面的解释。

我们更加照顾这种情况,不照顾你的那种情况。你的机器属于不正常的情况。

map --e820cycles=0 是一种错误,用来对付那些 “ 错误的 ” 机器。

对于一台正常的机器,它应该是

map --e820cycles=-1 (注意是负的1)

也即,默认的情况。

请仔细查阅 e820cycles 相关的帖子。
回复

使用道具 举报

29#
发表于 2012-9-10 14:56:31 | 只看该作者

回复 #27 Climbing 的帖子

>>> 我发觉无忧启动论坛正在飞速的走下坡路

我觉得这么说不好。多多理解别人,方为上策。

这年月很多东西都是 “ 浮躁  ” 的。大气候决定的,无忧只是一个小小鸟,左右不了大局。不要求全责备。世上没有完美。

个人看法,与你不同。但不表示你是错的,也不表示我是对的。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-12-5 08:37

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表