无忧启动论坛

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

[讨论] 关于PLPBT/Plop USB2.0驱动引导PE的深入讨论,望攻克难关【重大突破】

[复制链接]
跳转到指定楼层
1#
发表于 2010-12-12 12:15:05 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
众所周知,在BIOS不支持USB高速设备的电脑上启动PE是一件非常痛苦的事情:漫长的等待,既不知道是死机了,还是正在加载。、。。

于是诞生了Plop。

在小生实际操作的过程中发现了越来越多的问题。现在情况分析如下,望一起探讨!

硬件环境非常简单:一个CDROM,一个IDE硬盘((hd0,0)包含一个WindowsXP),一个Fbinst做的启动U盘。

Fbinst中的Grub菜单如下:

title  Windows PE Professional

find --set-root /BOOT/WINPE.ISO (0xff) && map --mem (ud)/BOOT/WINPE.ISO (0xff)
ls (hd0,0)/5AB9F2BD.ACK && map (hd0) (hd1) && map (hd1) (hd0)
map --hook
chainloader (0xff)

title  Load USB 2.0 Plop Boot Manager
kernel (ud)/BOOT/IMGS/plpbt.bin

首先,在第一个菜单中出现了“ls (hd0,0)/5AB9F2BD.ACK && map (hd0) (hd1) && map (hd1) (hd0)” ,此处我是希望通过U盘根目录下的5AB9F2BD.ACK文件判断是否交换盘符(不希望U盘占用(hd0),避免ghost自动化操作出现问题,关于这个问题的讨论见:http://bbs.wuyou.net/forum.php?mod=viewthread&tid=174991

其次,很显然,我希望在Grub引导过程中由用户手动加载PLPBT.bin USB驱动。

----------------------------------------------------------------------------------------------------------------------

事与愿违出现一些小问题:当直接选择第一个菜单进入PE的时候完全正常,但是当选择第二项加载PLPBT后,再回到Grub加载PE,便会在“ls (hd0,0)/5AB9F2BD.ACK ”出现选定的磁盘不存在的错误。

经过后来一整天的仔细研究发现一个关于PLPBT的重要机制:那就是经过plpbt的引导后,所有的(hdN)中的N(磁盘编号)都会来一次“大洗牌”,原来的磁盘编号都出现变化了。(不知道我的描述对不对)
因此造成了上述的的(hd0,0)不存在错误。
同时我估计也是这个原因,造成了很多朋友完全无法使用PLPBT加载复杂的菜单的原因!但是经过一番苦苦探寻还是无果。

1、想比较完美的解决这个问题,如何是好?
2、grub4dos中,是否有类似于智能判断硬盘的相关语句用来解决这个问题?
3、选择PLPBT加载驱动并且返回GRUB4DOS之后,GRUB能否记住我刚刚的选择,然后给出不同的菜单?

小生胆小且智商低,误喷勿射,若能有兄弟给点思路,就无憾了~~~~

[ 本帖最后由 2010suriv520 于 2010-12-12 12:28 编辑 ]
推荐
发表于 2010-12-13 20:48:57 | 只看该作者
呵呵,PLPBT.BIN,这个盘符增加的现象我已经发现了,前天还发现一件事,一个500G的硬盘,加载了PLPBT.BIN,发现GHOST11.5.1竟然找不到硬盘盘符了,不加载到是没有问题。

因此,如果要用GHOST,你就加上/FORCEUSB参数吧,GHOST会自己加上USB2.0驱动的,只不过是这样的话,HD的盘符也会加1.

[ 本帖最后由 victor888 于 2010-12-13 20:50 编辑 ]
回复

使用道具 举报

推荐
发表于 2010-12-14 10:11:01 | 只看该作者
大洗牌?也许Plop 10跟11的版本会有所不同,只是也许。
回复

使用道具 举报

推荐
 楼主| 发表于 2010-12-14 09:38:12 | 只看该作者

回复

最近进展:

从反面考虑下,其实很多情况我们并不需要具体的交换磁盘。然后在研究的过程中,意外发现完美者ISO中从硬盘启动用了类似这么一段menu:

find --set-root /ntldr
map () (hd0)
map (hd0) ()

刚开始没在意,后来发现这段代码真是绝了!
它实际上是获取了文件所在的磁盘!我当时怎么就没想到map ()这个方法呢。

随后就仔细改进了一下,可以实现更灵活的功能。

比如在U盘可见分区下建立一个名为ABC123.ACK的特征文件,
然后通过
find --set-root /ABC123.ACK
map () (hd99)
把U盘原先的(hd0)调后,避免一键ghost把U盘覆盖了。

又比如很多新手抱怨的kon-boot免密码模块失效,也可以通过这段代码实现智能判断(因为kon-boot执行后,会直接引导(hd0,0),而如果此时U盘占用了(hd0),则会引导失败)。
那么我们必须将原来的硬盘映射为(hd0)后再执行konboot,智能处理的代码如下:

find --set-root /io.sys  (我发现各种windows操作系统的根目录都有这个文件)
map () (hd0)
map (hd0) ()

后来我发现这种写法相对严谨且兼容性非常好。改天另立新贴把心得详细写出来——虽然对于高手来说不值一提,但对于我等小菜还是有些参考价值的。
回复

使用道具 举报

推荐
 楼主| 发表于 2010-12-12 12:47:16 | 只看该作者
经过本人仔细调试,发现重要的一点:
加载PLPBT后,可以使用map (hd0) (hd1),其中hd0是U盘;但是不能使用map (hd1) (hd0)!

但这样子很显然不行,出现了两个U盘,打不到交换的目的。
随后我又使用了map (hd2) (hd3),成功!由此发现,经过PLPBT后,U盘还是hd0,但是原来的硬盘(hd1)变成了现在的(hd2)!怪哉!
回复

使用道具 举报

6#
发表于 2010-12-14 10:16:27 | 只看该作者
看看grub4dos官方样例菜单menu.lst吧。
许多东西里面就有。
回复

使用道具 举报

7#
发表于 2010-12-14 10:32:20 | 只看该作者

回复 #4 2010suriv520 的帖子

比如在U盘可见分区下建立一个名为ABC123.ACK的特征文件,
然后通过
find --set-root /ABC123.ACK
map () (hd99)
把U盘原先的(hd0)调后,避免一键ghost把U盘覆盖了。


也可以用map () (hd-1)  即将当前调整为最后一个hd

find寻找特征文件也可以换用下面的方法

checkrange 0x80 read 0x8280 && map (hd0) (hd-1) && map (hd1) (hd0) && map --rehook

注意这只能用在usb-hdd启动
比如很多新手抱怨的kon-boot免密码模块失效,也可以通过这段代码实现智能判断(因为kon-boot执行后,会直接引导(hd0,0),而如果此时U盘占用了(hd0),则会引导失败)。
那么我们必须将原来的硬盘映射为(hd0)后再执行konboot,智能处理的代码如下:

find --set-root /io.sys  (我发现各种windows操作系统的根目录都有这个文件)
map () (hd0)
map (hd0) ()


有关konboot启动菜单问题可以找找maanu发的帖子  里面有写怎么写菜单  可惜很多人都不看  只知道发帖求助

io.sys文件定位不太现实  win7下就没有这个文件  xp的也早被我删除了
回复

使用道具 举报

8#
 楼主| 发表于 2010-12-14 12:17:34 | 只看该作者
原帖由 sratlf 于 2010-12-14 10:32 发表


有关konboot启动菜单问题可以找找maanu发的帖子  里面有写怎么写菜单  可惜很多人都不看  只知道发帖求助

io.sys文件定位不太现实  win7下就没有这个文件  xp的也早被我删除



谢谢S大提醒,刚刚发现这个问题了,受教。还有(hd-1)和checkrange的用法,长见识了,谢谢!

另外,maanu的所有帖子我都翻过,他描述的是最简单的情况:

use the following to guide through USB ,

title Kryptos Logic: Kon-Boot v1.1
map --mem /kon.img (fd0)
map --hook
chainloader (fd0)+1
map (hd1) (hd0)
map --hook
rootnoverify (fd0)


不知道你是不是指这个?这在绝大多数情况下的确是可行的,但有些情况就出错了。首先貌似它没有判断我的Windows到底安装在哪个盘的哪个分区;其次,就算是一个硬盘(hd1)和一个U盘(hd0)的最简单情况,当加载了PLPBT之后,这些菜单也会出错。
原因,据我猜测是PLPBT改动了某些东西(比如加载前的硬盘(hd1)在加载后就不再是hd1了。并且经过实测,使用map (hd1) (hd0)会出错
回复

使用道具 举报

9#
 楼主| 发表于 2010-12-14 13:07:14 | 只看该作者
另外,对于

checkrange 0x80 read 0x8280 && map (hd0) (hd-1) && map (hd1) (hd0) && map --rehook

这一句我也有看法。原因和上面一样:当加载了PLPBT之后,即使机器硬件环境是“标配”,上面这句也一定会出错。(至少我试了很多机器都是,哪位朋友能帮忙测试一下?)

因此我觉得,如果是这种情况,最好还是将 U盘调整到最后 与 硬盘调整到(hd0) 的语句分开来写,并且都用特征文件灵活处理。综合上面的各种情况,为了达到在各种情况下均正确交换硬盘的目的,我认为从思路上这样写应该是最严谨并且兼容性是最好的:

find --set-root --ignore-floppies --ignore-cd /ntldr && map () (hd0) && map (hd0) () || find --set-root --ignore-floppies --ignore-cd /bootmgr && map () (hd0) && map (hd0) ()
map --rehook

当然,这只是我的思路而已,手头没有好用的电脑,没有经过实际测试。更何况,虽然上面这句意图很明显,但与/或逻辑关系混乱没有层次,
一是希望有朋友能帮忙测试一下,看能否达到预期效果,,二是希望各位大大能提出更加完善的写法。

本人一直坚信,思路最重要,无奈于初学Grub,心有余而力不足,望版主大大理解。回头等待好消息!

今天下午还有原子物理考试,走啦~~~春哥保佑我逢考避过~~~

[ 本帖最后由 2010suriv520 于 2010-12-14 13:28 编辑 ]
回复

使用道具 举报

10#
 楼主| 发表于 2010-12-14 13:38:22 | 只看该作者

回复 #6 pseudo 的帖子

@pseudo
对了还有件事,那个plop,经过你的智能化处理成USB_ACC后,非常好用!谢谢你给我们带来这么多工具!

但经过我的测试,部分USB2.0机器在强制加载Plpbt后,确实有副作用(速度反而变慢了):

我试了3台USB2.0的机器,强制加载plpbt,结果本来只需要8s的 “map --mem”操作时间变成了2min,希望留意一下。

当然,这是plop的问题。你的USB_ACC还是相当好使的,他可以通过时间判断是否加载plpbt,并且在我的测试中均判断正确,时间阀值卡得挺好的。
回复

使用道具 举报

11#
发表于 2010-12-14 23:11:03 | 只看该作者
@ 2010suriv520

晕  这样的话就需要你自己想办法了  我没考虑过这个  我很少使用plpbt
回复

使用道具 举报

12#
发表于 2010-12-22 15:05:25 | 只看该作者
向楼主至敬,分析/讲解都很细致,你的学习精神--不放过每一个细节!
     
      做技术不在乎目前会什么或者不会什么,而是最应具有举一反三的能力!就拿盘符交换来说,一般情况,换成是我,我只会考虑能用就可以,决不会去考虑诸多特殊环境的问题,此贴我学习感悟到了你的学习精神,而不是你的技术方法!谢谢楼主!
回复

使用道具 举报

13#
发表于 2011-5-24 14:30:06 | 只看该作者
plop很好用,SATA也能用
回复

使用道具 举报

14#
发表于 2013-7-25 08:02:48 | 只看该作者
向楼主至敬,分析/讲解都很细致!
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-23 23:11

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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