无忧启动论坛

标题: grub菜单实现条件选择 [打印本页]

作者: xiyaxi    时间: 2009-4-27 10:14
标题: grub菜单实现条件选择
本人的U盘在笔记本上识别为FD0,在台式机上识别为HD0,0,在启动菜单上有一项是启动本机默认的WIN系统,那么这里能不能改写代码,让grub根据不同的情况来执行启动。

如果U盘被识别为FD0,那么就执行
title 启动 默认Microsoft Windows----启动盘识别为软盘
rootnoverify (hd0,0)
makeactive
chainloader +1

如果U盘识别为HD0,0,那么就执行
title 启动 默认Microsoft Windows----启动盘识别为硬盘
rootnoverify (hd1,0)
map (hd0) (hd1)
map (hd1) (hd0)
makeactive
chainloader +1

不知道上面的代码能合并吗?用条件语句来实现。类似下面的语法:

title 启动 默认Microsoft Windows
IF(...=(FD0))    DO(rootnoverify (hd0,0) makeactive chainloader +1)
ELSE               DO(rootnoverify (hd1,0) map (hd0) (hd1) map (hd1) (hd0) makeactive chainloader +1)
作者: zxw    时间: 2009-4-27 10:27
当然不能,至少目前不能
作者: xiyaxi    时间: 2009-4-28 10:26
谢谢一楼的回答

弄不明白,为什么U盘在不同的机器上被识别成不同的磁盘

有什么办法可以用让U盘固定识别为软盘吗?
作者: chenall    时间: 2009-4-28 17:29
方法1,使用两个菜单.
default 0
timeout 5

title 启动 默认Microsoft Windows
#如果执行失败就跳到第1个菜单执行.(本菜单是第0个)
fallback 1
#检测启动磁盘,如果是0x80也就是(hd0)就说明是Hdd模式了,就执行kernel(让它执行失败跳到前面fallback 指定的菜单).
checkrange 0x80 read 0x8280 && kernel
#后面的就不用解释了.
rootnoverify (hd0,0)
makeactive
chainloader +1

title
map (hd0) (hd1)
map (hd1) (hd0)
map --hook
rootnoverify (hd0,0)
makeactive
#使用pause --wait=0 && chainloader +1 是为了让这个菜单不可选择(不能使用上下键来选择菜单)
pause --wait=0 && chainloader +1


方法2.只使用一个菜单.
default 0
timeout 5
title 启动 默认Microsoft Windows
#hd0
#检测启动磁盘如果是(hd0){HDD模式]就交换磁盘映射.
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
rootnoverify (hd0,0)
makeactive
chainloader +1

[ 本帖最后由 chenall 于 2009-4-28 19:14 编辑 ]
作者: CWD    时间: 2009-4-28 18:17
标题: 回复 #4 chenall 的帖子
学习了。。。还真没用过这样的方式。。。能具体独项解说一下么。。。
作者: chenall    时间: 2009-4-28 19:14
把一些注释加到4楼的贴子里面去了.^_^.
作者: yjd    时间: 2009-4-28 21:20
好方法。收藏先。多谢!

不知在没hd1的情况下hdd方式U盘
执行了
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook

将会是什么情况呢?

[ 本帖最后由 yjd 于 2009-4-28 21:33 编辑 ]
作者: chenall    时间: 2009-4-28 22:35
当然是出错了.
执行到checkrange 0x80 read 0x8280 && map (hd1) (hd0)就会出错.

为了防止这种情况可以改成如下语句.

errorcheck off
checkrange 0x80 xxxx
checkrange 0x80 xxx..
checkrange 0x80 ...
errorcheck on
作者: xiyaxi    时间: 2009-4-28 22:41
看得出CHENALL对技术是有研究之人,本人佩服,也谢谢您的解答

对于方法2,本人还是有不理解的地方
default 0
timeout 5
title 启动 默认Microsoft Windows
#hd0
#检测启动磁盘如果是(hd0){HDD模式]就交换磁盘映射.
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
rootnoverify (hd0,0)
makeactive
chainloader +1

那么如果是检测不是HDD模式,那执行什么代码呢,下面好想都是执行HDD模式的代码

请CHENALL指教


对于YJD的问题,我是怎么理解的:

如果U盘被是被为HDD,那么那么应该就有HD1,因为U盘已经是HD0,除非你的电脑里没有硬盘,这种情况就是U盘启动后只存在一个U盘并被识别为HD0,不知道我的理解适合你的问题吗
作者: xiyaxi    时间: 2009-4-28 22:55
再认真的看了CHENALL的技术答贴,感觉是自己没有完全理解

当U盘被识别为硬盘,那么通过磁盘交换后,原硬盘(HD1就变成HD0),然后执行rootnoverify (hd0,0)

如果U盘被识别为软盘,那么就直接执行下面的rootnoverify (hd0,0)

看来CHENALL真是高手,高手一般是孤独的,很多东西不用心看还不能理解

再次谢谢CHENALL
作者: chenall    时间: 2009-4-29 00:36
你上面的理解是正确的.

还好你能理解否则我也说不清楚.^_^,因为我的贴子很多人看不懂.郁闷..
作者: xiyaxi    时间: 2009-4-29 09:06
经过本人的实践,CHENALL给出的代码在笔记本和虚拟机中测试成功

笔记本把U盘识别为软盘,而虚拟机中U盘被识别为硬盘

我是用CHENALL第二种方法测试测,第一种方法没有测试,但是看代码就知道和我最初菜单中分两种情况的代码比较相似,所以我想应该没有什么问题吧

一直以来比较欣赏严谨,简洁的逻辑,CHENALL给出的答案恰恰是这一逻辑的具体表达

谢谢CHENALL
作者: 不才    时间: 2009-4-29 09:31
嘿嘿,看来楼主是有所不知,chenall可是对grub的发展做出了莫大贡献之人。
作者: xiyaxi    时间: 2009-4-29 09:48
对事物的了解是有一个过程的,我是最近在弄U盘PE的时候才知道无忧论坛的,所以对无忧论坛的前辈们不是很熟悉,但是通过这个帖子,意识到CHENALL是一个相当具有功力的人,并且有些孤独,通过不才兄弟的介绍,才知道CHENALL对GRUB有专攻。谢谢不才兄弟,让我认识一个“GRUB大碗”。

刚才看到另外的一个帖子,基于CHENALL的回贴我都认真看了,有一处问题,还想请CHENALL指点下:

CHENALL发表于 2006-8-28 13:19  资料  主页 短消息  加为好友      

还有.

[Copy to clipboard] [ - ]CODE:
# 从本地磁盘的主分区启动
title 返回系统启动菜单
rootnoverify (hd0,0)
makeactive
chainloader  +1
建议不要这样使用,因为每启动一次就写一次硬盘.久了硬盘容易出问题的.

[Copy to clipboard] [ - ]CODE:
# 从本地磁盘的主分区启动
title 返回系统启动菜单
chainloader (hd0)+1
使用硬盘启动,或者你需要启动(hd0,0)下的WINNT系统也可以这样使用

[Copy to clipboard] [ - ]CODE:
title 返回系统启动菜单
chainloader (hd0,0)/ntldr
#or chainloader (hd0,0)+1


这里说到:建议不要这样使用,因为每启动一次就写一次硬盘.久了硬盘容易出问题的.

请问是不是我的启动菜单也要修改成下面的启动代码呢?
title 启动 默认Microsoft Windows
chainloader (hd0)+1

或者
title 启动 默认Microsoft Windows
chainloader (hd0,0)/ntldr
#or chainloader (hd0,0)+1

请CHENALL给予建设性的指导
作者: xiyaxi    时间: 2009-4-29 09:51
我完整的启动代码是不是需要修改成下面的样式

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1

或者
title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0,0)/ntldr
#or chainloader (hd0,0)+1

麻烦CHENALL
作者: xiyaxi    时间: 2009-4-29 10:49
修改启动代码如下:

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
chainloader (hd0)+1

在笔记本(U盘被识别为软盘)和虚拟机(U盘被识别为硬盘)双环境下启动圆满成功
作者: xianglang    时间: 2009-4-29 11:24
觉得上面这个比较简洁。我一直觉得,那个激活分区和不校验的命令,好象没有什么必要,因为一般电脑里的硬盘分区,应该都是已经激活了的。

不过楼上的MAP了之后,没有map --hook命令,MAP应该不起作用的吧?

[ 本帖最后由 xianglang 于 2009-4-29 11:27 编辑 ]
作者: zxw    时间: 2009-4-29 11:31
原帖由 zxw 于 2009-4-27 10:27 发表
当然不能,至少目前不能

汗,是自己学识浅薄了
作者: xiyaxi    时间: 2009-4-29 11:37
title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd0) (hd1)
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
chainloader (hd0)+1

这段代码,没有map --hook命令,测试十分彻底成功

但是在下面的启动项目中缺一不可

title 启动 MS-DOS 7.10
map --mem /boot/dos.ima (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
作者: xiyaxi    时间: 2009-4-29 11:53
最终精简代码

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
chainloader (hd0)+1

测试结果:出色的成功!

请CHENALL看到此代码后,给予技术上的解释,并说明下这样的代码有那些不足及其不安全的地方,谢谢。
作者: xianglang    时间: 2009-4-29 12:08
是不是你的主板,没将U盘作为第一硬盘启动?试试注释checkrange 0x80 read 0x8280 && map (hd1) (hd0)这一项,看能不能从硬盘启动?
作者: xiyaxi    时间: 2009-4-29 13:11
xianglang 误会了

我的问题是U盘在笔记本上识别为软盘,在台式机上识别为硬盘,我原本两种情况都能启动

我需要解决的是:不管U盘被识别为什么盘,在GRUB启动菜单里只需一个选项就可以实现启动电脑默认的操作系统

这个问题CHENALL已经很好的帮我解决了。
作者: chenall    时间: 2009-4-29 13:22
#14,15
只要把原来的代码里面的
makeactive去掉就可以了,这个没有必要.

使用chainloader /NTLDR可能成功率比较高(因为这个不需要该分区上有引导代码,即使引导代码坏了也可以启动).

#16,17
代码可以启动成功,是因为grub4dos最后是默认执行map --hook命令,
而且你的U盘上刚好有引导扇区.否则就会失败.

xiyaxi 懂得举一反三,很不错,这就是学好电脑的基础了.^_^
(很多时候别人给你的答案并不是最好的,也不一定是对的,因为别人一般都是在你原来的基础上进行修改的,只要你理解了这里面的内容
通过举一反三自己可以再次修改达到理想的状态,并且加深了印像.)

20楼的代码很简练,
为了保证不出问题,
map --hook最好还是加上.

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1

[ 本帖最后由 chenall 于 2009-4-29 13:27 编辑 ]
作者: yjd    时间: 2009-4-29 13:59
原帖由 chenall 于 2009-4-28 22:35 发表
当然是出错了.
执行到checkrange 0x80 read 0x8280 && map (hd1) (hd0)就会出错.

为了防止这种情况可以改成如下语句.

errorcheck off
checkrange 0x80 xxxx
checkrange 0x80 xxx..
checkrange 0x80 . ...

^_^。多谢chenall大解答。昨天就把你的方法用到我的U盘上了。
感谢
作者: pseudo    时间: 2009-4-29 14:08
grub4dos功能强大。借助它,PE可以做到:
1、一个菜单项,不分USB-ZIP、USB-HDD,USB-CDROM,统一处理。
2、一个ISO映像。不分U盘、光盘、量产、移动盘、硬盘版,发布时只提供一个版本(一个iso映像文件)。
3、ISO映像可不解开。ISO映像可以解开来用,也可以整体使用(盘上只看到iso文件),解开与不解开之间无需修改任何配置。不担心找不到外置程序。
4、pxe启动与本地启动统一。无需结构调整、无需配置即可直接用于pxe启动,拷贝式安装。支持本地加远程混合快速启动。
5、随意增删。PE被分解为多个组件(包括“内核”也被分解),组件可以随意增删(“内核”也可删,最小可只剩3M),不用修改配置。
6、位置灵活。组件可以分散放置到各分区,典型地:U盘量产区放一些,非量产区放一点,硬盘C区放一点,D区放一点,pxe服务器端放一点。
7、目录清爽。因为努力遵循了这样的原则:用于启动的文件尽量少,可以只有一个;几乎每个用户看到的文件都是组件,一个文件没有与其它文件合并打包,往往意味着它是可以删除的,所以才独立出来作为组件。

参考0PE和chenall的PE。
另外,这里有些实现技术的参考资料http://bbs.wuyou.net/forum.php?m ... 7686&highlight=
作者: yjd    时间: 2009-4-29 14:12
map (hd1) (hd0)
map --hook
我原来U盘上写启动硬盘的windows也是用到这2句。

到现在对这个也有点迷糊
1,
map (hd1) (hd0)    //把hd1换为hd0
map --hook           //生效
2,
map (hd1) (hd0)    //把hd1换为hd0
map (hd0) (hd1)    //把hd0换为hd1
map --hook           //生效

1的hd0将会不见还是?比如进入pe或dos
2是2个互换位置。这个理解。
作者: pseudo    时间: 2009-4-29 14:17
标题: 回复 #26 yjd 的帖子
1的hd0将会不见还是?比如进入pe或dos

dos下不见,pe下可见。
作者: yjd    时间: 2009-4-29 14:28
原帖由 pseudo 于 2009-4-29 14:17 发表
1的hd0将会不见还是?比如进入pe或dos

dos下不见,pe下可见。

多谢pseudo 大解答。
看来加载dos工具箱还是要2条都用上,现在上班时间,有点偷懒直接就发问没动手实践^_^
作者: xiyaxi    时间: 2009-4-29 18:28
再次请教

有些人喜欢实践,有些人喜欢理论,就好比是工科与理科一样,侧重点不一样

本人也不是在研究什么,只是把问题摆出来,就想问题搞得更清楚,或者是追求一种思想上的愉悦。

CHENALL指出:
代码可以启动成功,是因为grub4dos最后是默认执行map --hook命令,
而且你的U盘上刚好有引导扇区.否则就会失败.

第一句好理解,第二句对于我这样的菜鸟有些困惑
而且你的U盘上刚好有引导扇区.否则就会失败,怎么说不管有没有执行map --hook,只要U盘上没有引导扇区,就必然启动失败。或者说执行map --hook后,程序还要去引导扇区做点什么事情?(请允许我这么不专业的描述)

不知道CHENALL能不能形象的描述下这个启动详细过程,好让我更加清楚这个启动的原理。在此先说声谢谢。

我对下面代码的理解(不对的地方还请指正)

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0,0)/ntldr

在启动菜单中选择这个选项后,首先GRUB程序去检查BIOS(抑或是磁盘引导区)0x80位置的代码,如果是0x8280,那么就执行后面的map (hd1) (hd0),也就是进行磁盘虚拟交换,接着再次重复检查,并执行map --hook,将虚拟的(hd0)挂载即让磁盘虚拟交换生效,最后执行chainloader (hd0,0)/ntldr,就是把ntldr载入内存并运行它。

我上面的理解里并没有与CHENALL所说的“U盘上刚好有引导扇区”相关联,显然是不对的,请CHENALL清理下我的思路并指正这个启动的基本原理。谢谢
作者: chenall    时间: 2009-4-29 18:47
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
#读取内存0x8280位置的值(GRUB4DOS内置变量,启动磁盘号,具体请看GRUB4DOS说明).如果是0x80(也就是hd0)就执行后面的语句.


另外我前面说的"U盘刚好的引导扇区"是因为你之前使用的菜单.

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
因为这时上面的映射还没有生效,执行chainloader实际上是加载了U盘上的mbr的内容.
chainloader (hd0)+1
到后面默认map --hook生效后U盘原来的位置被硬盘取代了,所以就启动成功了.

你可以尝试使用GRUBINST之类的工具把GRUB4DOS引导写到U盘上再试试使用这样的菜单,或许就会发现这其中的问题了.(我自己没有试过.^_^,只是理论)

http://bbs.wuyou.net/forum.php?mod=viewthread&tid=139062&extra=page%3D2
这里就有一个这样的工具.

你可以测试下具体的结果.


另外一点.
chainloader (hd0,0)/ntldr

建议还是使用chainloader (hd0)+1

因为系统不一定是装在(hd0,0)上的,也有可能是(hd0,1).
总之只要chainloader (hd0)+1让它自己去找就OK了.

[ 本帖最后由 chenall 于 2009-4-29 18:58 编辑 ]
作者: chenall    时间: 2009-4-29 19:03
刚刚又想到一点.

chainloader可能是等系统启动时再加载指向的内容的.

如果这样子的话上面的写法也算是正确的.

title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
#或许这个只是作一个标记(具体我也不清楚^_^).
chainloader (hd0)+1
#最后默认map --hook

在正式启动系统的时候才加载chainloader的内容.所以就会启动成功了.
作者: xiyaxi    时间: 2009-4-29 19:55
谢谢CHENALL的解答

我刚才在吃饭的时候有回想这个问题,如果一定要与引导扇区关联,那么我就大胆的假设:

执行chainloader的时候可能是:GRUB程序去引导扇区寻找启动代码,启动代码去引导NTLDR,这样就和引导扇区关联起来

现在再来解释我上面的思路,如果有MAP---HOOK,那么GRUB就去刚激活盘(原HD1)的引导扇区寻找启动代码,如果没有MAP---HOOK,那么GRUB就去当前盘(HD0即U盘)的引导扇区寻找启动代码。

那么CHENALL说的默认执行MAP---HOOK,在这里又遇到理论上的困难。
作者: xiyaxi    时间: 2009-4-29 19:58
呵呵,看了CHENALL的回帖,真是似曾相识

谢谢CHENALL,相见恨晚
作者: xianglang    时间: 2009-4-29 21:42
印象中,G4D如果没有map --hook的话,map 的内容是不起作用的,应该不存在不使用命令就能够自动 map --hook 吧。我觉得楼主能成功,还是怀疑是不是U盘没有默认为HD0启动?反正我试过map 磁盘镜像之后,不做 map --hook 的话,是不能成功启动镜像里的系统的。
作者: lianjiang    时间: 2009-4-29 21:49
原帖由 xianglang 于 2009-4-29 21:42 发表
印象中,G4D如果没有map --hook的话,map 的内容是不起作用的,应该不存在不使用命令就能够自动 map --hook 吧。我觉得楼主能成功,还是怀疑是不是U盘没有默认为HD0启动?反正我试过map 磁盘镜像之后,不做 map ...


没看前面的帖子吗?呵呵。
img与hd是比一样的。
作者: xiyaxi    时间: 2009-4-29 21:49
楼上,不是启动镜像文件,是启动硬盘的系统,镜像的需要MAP --HOOK
作者: chenall    时间: 2009-4-29 21:49
GRUB4DOS启动命令默认隐藏map --hook
就像菜单条最后默认执行boot一样.

执行boot时如果发现有仿真盘未hook就会自动执行map --hook

测试方法.只使用以下菜单,会再次进入grub4dos环境这时再查看map的状态就知道了.
title test
map (hd0) (hd1)
chainloader /grldr

[ 本帖最后由 chenall 于 2009-4-29 21:51 编辑 ]
作者: xianglang    时间: 2009-4-29 23:44
汗……我以为MAP之后,启动IMG与HD是一样的,一定要HOOK才行——菜单中可以BOOT我倒是知道。
作者: pseudo    时间: 2009-4-29 23:53
我想是这样的:
map (hd1) (hd0)
chainloader (hd0)+1
可能等价于
map (hd1) (hd0)
chainloader (hd0)+1
map --hook(这行有被隐式加上的可能,我没验证,但建议总是显式写出为好)
但与
map (hd1) (hd0)
map --hook
chainloader (hd0)+1
不同。
区别在于chainloader (hd0)+1中的hd0,前者对应物理盘hd0,后者对应物理盘hd1。后者hd0是hd1仿真得来的,真正物理盘hd0被暂时屏蔽不可访问。

仿真确实map --hook后才生效。

[ 本帖最后由 pseudo 于 2009-4-29 23:56 编辑 ]
作者: Climbing    时间: 2009-4-30 06:55
两个对Grub4dos使用的比较变态的人都在这里出现了:chenall和pseudo。

我虽然搞grub4dos这么多年,却从来没有用过这些变态的用法,例如dd、checkrange之类的命令。

可以这样试试:

  1. title 启动 默认Microsoft Windows
  2. checkrange 0x80 read 0x8280 && map (hd1) (hd0)
  3. checkrange 0x80 read 0x8280 && map --hook
  4. find --set-root /ntldr
  5. chainloader /ntldr
复制代码


这应该是兼容性较好的启动方式了。
作者: xiyaxi    时间: 2009-4-30 08:07
在无忧众多高手的探讨中,我似乎对GRUB的认识更上一层楼。

特别是第四页中,chenallpseudoClimbing 总结式发言让问题最终浮出水面。

在此,特别鸣谢CHENALL的悉心指教与各位网友的互动。
作者: xianglang    时间: 2009-4-30 10:13
指定ntldr文件的话,我觉得似乎不太好。要是遇到一些不是XP或者2003的电脑,从菜单进行硬盘启动就可能做不到了。
作者: yjd    时间: 2009-4-30 12:02
知道了启动过程,实在不行就c进入命令行自己打命令。根据不同环境及时变更。。
毕竟世界没万能的东西。。
作者: pseudo    时间: 2009-4-30 15:36
原帖由 Climbing 于 2009-4-30 06:55 发表
两个对Grub4dos使用的比较变态的人都在这里出现了:chenall和pseudo。

我虽然搞grub4dos这么多年,却从来没有用过这些变态的用法,例如dd、checkrange之类的命令。

可以这样试试:

[Copy to clipboard] [ - ]
CODE:
title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
find --set-root /ntldr
chainloader /ntldr


这应该是兼容性较好的启动方式了。

Climbing兄的菜单我没试过,前面大家的菜单我也没试过。实践经验不多,只是纸上谈兵。

如果ntldr仅出现在物理盘hd0,且checkrange 0x80 read 0x8280为真,
则这个菜单的find将找不到ntldr,这时chainloader /ntldr可能失败。
作者: aoskas    时间: 2009-4-30 22:02
u盘认成hd0,fd0都能启动老毛桃 pe  试成功。  谢谢高人们!!
checkrange 0x80 read 0x8280  ||  map (hd0) (fd0)
checkrange 0x80 read 0x8280 || map (fd0) (hd0)
checkrange 0x80 read 0x8280 || map --hook
find --set-root /krldr
chainloader /krldr

[ 本帖最后由 aoskas 于 2009-4-30 22:03 编辑 ]
作者: devilma    时间: 2009-5-1 00:41
在grub4dos 语句中 &&和||到底是什么含义呢,期望给位给我详细说一下,我有点晕了!
作者: cjzzz    时间: 2009-5-5 00:10
title Boot From HD0
rootnoverify && map (hd1) (hd0)
rootnoverify && map --hook
rootnoverify (hd0,0)
chainloader +1
作者: xiyaxi    时间: 2009-5-5 07:42
奇怪的事情再次颠覆本贴所有人的理论,真是事出蹊跷!!!

朋友拿来一个MP3,我把它做成启动U盘。依据本贴所有高手给出的答案经过无数次的测试,都不能成功,出现的结果就是无尽的循环,看表象预计原因是不能进行磁盘交换。

只有我当初发帖时的代码能够启动,我的代码如下:

rootnoverify (hd2,0)
map (hd0) (hd2)
map (hd2) (hd0)
makeactive
chainloader +1


可惜这段代码不能够实现软盘和硬盘双重选择,请各位高手支招。
作者: yjd    时间: 2009-5-12 10:12
原帖由 xiyaxi 于 2009-5-5 07:42 发表
奇怪的事情再次颠覆本贴所有人的理论,真是事出蹊跷!!!

朋友拿来一个MP3,我把它做成启动U盘。依据本贴所有高手给出的答案经过无数次的测试,都不能成功,出现的结果就是无尽的循环,看表象预计原因是不能 ...

奇怪了?你的代码怎么是hd2
那应该是第三个硬盘。

等于说map (hd2) (hd0)才对。。。
作者: shn    时间: 2009-5-14 12:01
上次看到maxdos的men.ls感到这一句很奇怪,原来来自这里!!
硬件还是很复杂的,mp3的主芯片应该不能和u盘等同吧
作者: ywzhuss    时间: 2009-5-22 06:59
title 启动 默认Microsoft Windows
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1
用了上面的配置之后启动不成功。
电脑配置
BIOS为Award的,可以认成硬盘和usb-hdd
硬盘为ide接口的一块,sata接口的raid0(两块硬盘组成)及jbod的一块,系统装在raid0上。
请各位帮下忙。
作者: xiyaxi    时间: 2009-8-17 17:30
我用命令查看,软盘的代码是0x04,硬盘是0x07,那么前面的条件代码启动失败,出现无限的循环。




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