无忧启动论坛

标题: 【完美解决】关于U启>G4D>从硬盘引导的问题 [打印本页]

作者: hulongzhuo    时间: 2010-12-28 18:29
标题: 【完美解决】关于U启>G4D>从硬盘引导的问题
关于U启>G4D>从硬盘引导的问题

U启菜单中选择从硬盘启动,如果BIOS认出U盘就将它设为HD0,而硬盘则为HD1,那么选择以下代码从硬盘启动将出错,
好像是G4D把HD0当硬盘去引导,故而出错;如果BIOS认不出U盘,则HD0是硬盘,可以顺利硬盘启动;现在的问题是
如何解决当U盘为HD0时,硬盘能顺利引导?

看到别人是这样判断的:

title 硬盘启动
checkrange 0x80 read 0x8280 && map (hd1) (hd0)
checkrange 0x80 read 0x8280 && map --hook
chainloader (hd0)+1

但是这个代码非常不准确,因为 read 0X8280 值变化大不相同,经我测试,就同一台机而言,在G4D读取menu.lst之前和之后,
也就是在GRLDR未载入菜单,按C进命令行,0X8280的值比如说是0X80,但在载入菜单后按ESC退出到G4D命令行,再读取
0X8280的值却变成了0X23,在其它机上又会不一样,比如之前是0X0,之后是0X23,变化不一,所以导致硬盘引导失败,经我多
次尝试,用如下方法得到完美解决:

==========================================

方法如下:

title 硬盘启动
find /mydisk.txt && map (hd1) (hd0)

find /mydisk.txt && map --hook
root (hd0,0)
chainloader +1

注:在U盘建立一个特征文件如mydisk.txt,首先如果BIOS识别U盘为第一硬盘(hd0)的话,Find肯定可以查找到特征文件mydisk.txt,
那么这时用map将U盘与硬盘做交换即物理硬盘成为(hd0),最后加载引导扇区,从硬盘引导。

[ 本帖最后由 hulongzhuo 于 2011-1-3 23:36 编辑 ]
作者: hulongzhuo    时间: 2010-12-29 00:13
自已顶下~~~
作者: esxcfr    时间: 2010-12-29 09:58
提示: 作者被禁止或删除 内容自动屏蔽
作者: hulongzhuo    时间: 2010-12-29 17:12
嗯,改为MAP就行!只要不用变量判断就行!

[ 本帖最后由 hulongzhuo 于 2011-1-3 21:59 编辑 ]
作者: 2010aetom    时间: 2011-1-3 17:03
赞同二楼,思路是撇开硬盘分区引导扇区是否有引导记录,而是寻找win的引导文件ntldr,方法直接而有效
作者: hulongzhuo    时间: 2011-1-3 22:01
原帖由 2010aetom 于 2011-1-3 17:03 发表
赞同二楼,思路是撇开硬盘分区引导扇区是否有引导记录,而是寻找win的引导文件ntldr,方法直接而有效



当然NTLDR肯定是可行的,但是能通用吗??? 如果是不同的操作系统引导文件都不相同!!。。
作者: Plantsoot    时间: 2011-1-4 08:24
标题: 回复 #1 hulongzhuo 的帖子
楼主的方法貌似只适合自己的电脑,如果是专门给别人维护系统的U盘不适合吧。总不能先在人家机器上建一个文件吧。
作者: zhaohj    时间: 2011-1-4 10:22
新版grub4dos已经改变了内存变量,当U启时(bd)设备为ud,当前设备为可见区。
因此判断0x82a0值为0x80时交换就可以了
checkrange 0x23 read 0x8280 && checkrange 0x80 read 0x82a0 && map (hd1) (hd0)  && map --hook && rootnoverify (hd0,0) && chainloader +1
上面是一种情况,还要处理可见区非0x80,所有完整的应该:
checkrange 0x23 read 0x8280 && checkrange 0x80 read 0x82a0 && map (hd1) (hd0)  && map --hook
rootnoverify (hd0,0) && chainloader +1

[ 本帖最后由 zhaohj 于 2011-1-4 10:26 编辑 ]
作者: liuzhaoyzz    时间: 2011-1-4 11:27
做个记号,这应该是通用从硬盘启动的菜单了吧。以后就复制粘贴,呵呵。
作者: hulongzhuo    时间: 2011-1-4 22:00
原帖由 Plantsoot 于 2011-1-4 08:24 发表
楼主的方法貌似只适合自己的电脑,如果是专门给别人维护系统的U盘不适合吧。总不能先在人家机器上建一个文件吧。


不对吧,草哥,这个文件只要建在UD可见区就行啊,比如你有GHO文件,那这个GHO就可以做为特征文件,合情合理。。。别人的硬盘你是管不着地,我的U盘我做主!
作者: hulongzhuo    时间: 2011-1-4 22:10
原帖由 zhaohj 于 2011-1-4 10:22 发表
新版grub4dos已经改变了内存变量,当U启时(bd)设备为ud,当前设备为可见区。
因此判断0x82a0值为0x80时交换就可以了
checkrange 0x23 read 0x8280 && checkrange 0x80 read 0x82a0 && map (hd1) (hd0)  && ma ...



我只能说读0X8280是一塌糊涂,同一台电脑,不同环镜都不一样(当然同为GRUB命令行下),不同的机器,也是不一样,杯具而已,
虽然我对这些硬件底层不深入,我这么说你也许不服气,那么你就整吧!。。。




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