无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 7071|回复: 10
打印 上一主题 下一主题

[讨论] 【完美解决】关于U启>G4D>从硬盘引导的问题

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-28 18:29:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
关于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 编辑 ]
2#
 楼主| 发表于 2010-12-29 00:13:40 | 只看该作者
自已顶下~~~
回复

使用道具 举报

3#
发表于 2010-12-29 09:58:28 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

4#
 楼主| 发表于 2010-12-29 17:12:16 | 只看该作者
嗯,改为MAP就行!只要不用变量判断就行!

[ 本帖最后由 hulongzhuo 于 2011-1-3 21:59 编辑 ]
回复

使用道具 举报

5#
发表于 2011-1-3 17:03:09 | 只看该作者
赞同二楼,思路是撇开硬盘分区引导扇区是否有引导记录,而是寻找win的引导文件ntldr,方法直接而有效
回复

使用道具 举报

6#
 楼主| 发表于 2011-1-3 22:01:59 | 只看该作者
原帖由 2010aetom 于 2011-1-3 17:03 发表
赞同二楼,思路是撇开硬盘分区引导扇区是否有引导记录,而是寻找win的引导文件ntldr,方法直接而有效



当然NTLDR肯定是可行的,但是能通用吗??? 如果是不同的操作系统引导文件都不相同!!。。
回复

使用道具 举报

7#
发表于 2011-1-4 08:24:29 | 只看该作者

回复 #1 hulongzhuo 的帖子

楼主的方法貌似只适合自己的电脑,如果是专门给别人维护系统的U盘不适合吧。总不能先在人家机器上建一个文件吧。
回复

使用道具 举报

8#
发表于 2011-1-4 10:22:06 | 只看该作者
新版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 编辑 ]
回复

使用道具 举报

9#
发表于 2011-1-4 11:27:47 | 只看该作者
做个记号,这应该是通用从硬盘启动的菜单了吧。以后就复制粘贴,呵呵。
回复

使用道具 举报

10#
 楼主| 发表于 2011-1-4 22:00:49 | 只看该作者
原帖由 Plantsoot 于 2011-1-4 08:24 发表
楼主的方法貌似只适合自己的电脑,如果是专门给别人维护系统的U盘不适合吧。总不能先在人家机器上建一个文件吧。


不对吧,草哥,这个文件只要建在UD可见区就行啊,比如你有GHO文件,那这个GHO就可以做为特征文件,合情合理。。。别人的硬盘你是管不着地,我的U盘我做主!
回复

使用道具 举报

11#
 楼主| 发表于 2011-1-4 22:10:04 | 只看该作者
原帖由 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命令行下),不同的机器,也是不一样,杯具而已,
虽然我对这些硬件底层不深入,我这么说你也许不服气,那么你就整吧!。。。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-5-7 02:23

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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