无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
12
返回列表 发新帖
楼主: xiyaxi
打印 上一主题 下一主题

grub菜单实现条件选择

[复制链接]
31#
发表于 2009-4-29 19:03:38 | 只看该作者
刚刚又想到一点.

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

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

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

在正式启动系统的时候才加载chainloader的内容.所以就会启动成功了.
回复

使用道具 举报

32#
 楼主| 发表于 2009-4-29 19:55:38 | 只看该作者
谢谢CHENALL的解答

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

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

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

那么CHENALL说的默认执行MAP---HOOK,在这里又遇到理论上的困难。
回复

使用道具 举报

33#
 楼主| 发表于 2009-4-29 19:58:49 | 只看该作者
呵呵,看了CHENALL的回帖,真是似曾相识

谢谢CHENALL,相见恨晚
回复

使用道具 举报

34#
发表于 2009-4-29 21:42:15 | 只看该作者
印象中,G4D如果没有map --hook的话,map 的内容是不起作用的,应该不存在不使用命令就能够自动 map --hook 吧。我觉得楼主能成功,还是怀疑是不是U盘没有默认为HD0启动?反正我试过map 磁盘镜像之后,不做 map --hook 的话,是不能成功启动镜像里的系统的。
回复

使用道具 举报

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


没看前面的帖子吗?呵呵。
img与hd是比一样的。
回复

使用道具 举报

36#
 楼主| 发表于 2009-4-29 21:49:45 | 只看该作者
楼上,不是启动镜像文件,是启动硬盘的系统,镜像的需要MAP --HOOK
回复

使用道具 举报

37#
发表于 2009-4-29 21:49:50 | 只看该作者
GRUB4DOS启动命令默认隐藏map --hook
就像菜单条最后默认执行boot一样.

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

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

[ 本帖最后由 chenall 于 2009-4-29 21:51 编辑 ]
回复

使用道具 举报

38#
发表于 2009-4-29 23:44:03 | 只看该作者
汗……我以为MAP之后,启动IMG与HD是一样的,一定要HOOK才行——菜单中可以BOOT我倒是知道。
回复

使用道具 举报

39#
发表于 2009-4-29 23:53:54 | 只看该作者
我想是这样的:
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 编辑 ]
回复

使用道具 举报

40#
发表于 2009-4-30 06:55:58 | 只看该作者
两个对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
复制代码


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

使用道具 举报

41#
 楼主| 发表于 2009-4-30 08:07:05 | 只看该作者
在无忧众多高手的探讨中,我似乎对GRUB的认识更上一层楼。

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

在此,特别鸣谢CHENALL的悉心指教与各位网友的互动。
回复

使用道具 举报

42#
发表于 2009-4-30 10:13:53 | 只看该作者
指定ntldr文件的话,我觉得似乎不太好。要是遇到一些不是XP或者2003的电脑,从菜单进行硬盘启动就可能做不到了。
回复

使用道具 举报

43#
发表于 2009-4-30 12:02:47 | 只看该作者
知道了启动过程,实在不行就c进入命令行自己打命令。根据不同环境及时变更。。
毕竟世界没万能的东西。。
回复

使用道具 举报

44#
发表于 2009-4-30 15:36:24 | 只看该作者
原帖由 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可能失败。
回复

使用道具 举报

45#
发表于 2009-4-30 22:02:15 | 只看该作者
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 编辑 ]
回复

使用道具 举报

46#
发表于 2009-5-1 00:41:59 | 只看该作者
在grub4dos 语句中 &&和||到底是什么含义呢,期望给位给我详细说一下,我有点晕了!
回复

使用道具 举报

47#
发表于 2009-5-5 00:10:40 | 只看该作者
title Boot From HD0
rootnoverify && map (hd1) (hd0)
rootnoverify && map --hook
rootnoverify (hd0,0)
chainloader +1
回复

使用道具 举报

48#
 楼主| 发表于 2009-5-5 07:42:44 | 只看该作者
奇怪的事情再次颠覆本贴所有人的理论,真是事出蹊跷!!!

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

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

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


可惜这段代码不能够实现软盘和硬盘双重选择,请各位高手支招。
回复

使用道具 举报

49#
发表于 2009-5-12 10:12:07 | 只看该作者
原帖由 xiyaxi 于 2009-5-5 07:42 发表
奇怪的事情再次颠覆本贴所有人的理论,真是事出蹊跷!!!

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

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

等于说map (hd2) (hd0)才对。。。
回复

使用道具 举报

50#
发表于 2009-5-14 12:01:00 | 只看该作者
上次看到maxdos的men.ls感到这一句很奇怪,原来来自这里!!
硬件还是很复杂的,mp3的主芯片应该不能和u盘等同吧
回复

使用道具 举报

51#
发表于 2009-5-22 06:59:06 | 只看该作者
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上。
请各位帮下忙。
回复

使用道具 举报

52#
 楼主| 发表于 2009-8-17 17:30:10 | 只看该作者
我用命令查看,软盘的代码是0x04,硬盘是0x07,那么前面的条件代码启动失败,出现无限的循环。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 02:34

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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