无忧启动论坛

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

[已解决] UD识别为USB-zip时如何引导可见区PE!HHH333一语点破玄机。zhaohj进一步完善。

[复制链接]
跳转到指定楼层
1#
发表于 2011-6-8 21:46:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
最佳答案:43楼

同时感谢 dgxhls  zxw  mygamexxx 参与解答或测试。


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



一个1GB的U盘的UD,其grldr版本是20110524,外置菜单中关于启动 “启动U盘可见区 2003PE” 的内容如下:

  1. timeout 10
  2. default 0
  3. gfxmenu (bd)/IMGS/MESSAGE

  4. title  启动U盘可见区 2003PE
  5. find --set-root --ignore-floppies --ignore-cd /AXPE/SETUPLDR.BIN
  6. chainloader /AXPE/SETUPLDR.BIN
复制代码
该UD在识别为USB-hdd的机器上没有任何问题。而有一台机器,BIOS中没有USB-hdd启动项,只有USB-ZIP项,在该机UD能启动,但
执行
find --set-root --ignore-floppies --ignore-cd /AXPE/SETUPLDR.BIN
时,提示

error 15: file not find


遂改为:
  1. title  启动U盘可见区 2003PE
  2. find --set-root --ignore-cd /AXPE/SETUPLDR.BIN
  3. chainloader /AXPE/SETUPLDR.BIN
复制代码
此时提示
NTDETECT fail



正好手里还有另一个U盘做的UD,该UD内的grldr为20110128版,其内置菜单如下

  1. default 0
  2. timeout 0
  3. title find /AXPE/MENU.LST
  4. errorcheck off
  5. configfile /AXPE/MENU.LST
  6. find --set-root --ignore-floppies --ignore-cd /AXPE/MENU.LST && configfile /AXPE/MENU.LST
  7. errorcheck on
  8. commandline
  9. title commandline
  10. commandline
  11. title reboot
  12. reboot
  13. title halt
  14. halt
复制代码
该MENU.LST的关于启动PE的命令如下:
  1. title  [2]  运行Windows PE
  2. map --mem /AXPE/WINPE.ISO (0xff)
  3. map --hook
  4. chainloader (0xff)
复制代码
用此UD能够找到可见区的AXPE\ MENU.LST,并成功运行MENU.LST中的启动可见区的PE。


问题:如何解决UD被识别为USB-zip时,通过SETUPLDR.BIN启动可见区的PE?

[ 本帖最后由 chiannet 于 2011-6-11 14:27 编辑 ]
2#
发表于 2011-6-8 22:55:53 | 只看该作者
试试:
title  启动U盘可见区 2003PE
find --set-root /AXPE/SETUPLDR.BIN
chainloader /AXPE/SETUPLDR.BIN
回复

使用道具 举报

3#
 楼主| 发表于 2011-6-9 06:03:01 | 只看该作者

回复 #2 dgxhls 的帖子

  1. title  启动U盘可见区 2003PE
  2. find --set-root /AXPE/SETUPLDR.BIN && chainloader /AXPE/SETUPLDR.BIN
复制代码
  1. title  启动U盘可见区 2003PE
  2. find --set-root --ignore-cd /AXPE/SETUPLDR.BIN
  3. chainloader /AXPE/SETUPLDR.BIN
复制代码
一个结果NTDETECT Fail。

从提示也能预测到,因为出现了NTDETECT Fail,证明find --set-root 命令已执行,chainloader命令也已执行,应当是SETUPLDR.BIN找不到AXPE所在分区。这就不知如何解决了。

[ 本帖最后由 chiannet 于 2011-6-9 06:04 编辑 ]
回复

使用道具 举报

4#
发表于 2011-6-9 06:31:18 | 只看该作者

回复 #3 chiannet 的帖子

肯定是出现了fd0,0的情况,这个问题我有详细说明,请看反馈帖,你要加如下语句,可以放预执行区。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map (hd0) (hd) && map --hook && rootnoverify (hd0,0)
回复

使用道具 举报

5#
 楼主| 发表于 2011-6-9 06:41:59 | 只看该作者

回复 #4 hhh333 的帖子

  1. title  启动U盘可见区 2003PE
  2. find --set-root /AXPE/SETUPLDR.BIN
  3. if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map (hd0) (hd) && map --hook && rootnoverify (hd0,0)
  4. chainloader /AXPE/SETUPLDR.BIN
复制代码
这样子吗?马上测试。

[ 本帖最后由 chiannet 于 2011-6-9 07:02 编辑 ]
回复

使用道具 举报

6#
 楼主| 发表于 2011-6-9 06:49:45 | 只看该作者

回复 #4 hhh333 的帖子

用上面的菜单,无论UD被识别为USB-HDD还是USB-ZIP都没问题了



[ 本帖最后由 chiannet 于 2011-6-9 07:03 编辑 ]
回复

使用道具 举报

7#
发表于 2011-6-9 08:09:00 | 只看该作者
但也不够严谨,如不存在(hd0)就会出错,再超过两个硬盘会导致盘符混乱。
用一个P处理解决比较好:
!BAT
set /a hd=*0x475&0xff+0x7f
if %hd%==127 exit
:move
set /a hd1=%hd%+1
map (%hd%) (%hd1%)
set /a hd=%hd%-1
checkrange 0x7f calc %hd% || goto :move
exit
========
把上面P处理保存为(bd)/BOOT/GRUB/MOVE

title  启动U盘可见区 2003PE
find --set-root /AXPE/SETUPLDR.BIN
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && move && map --hook && rootnoverify (hd0,0)
chainloader /AXPE/SETUPLDR.BIN
回复

使用道具 举报

8#
发表于 2011-6-9 08:36:43 | 只看该作者
何必这么麻烦?直接这样就行了。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)

[ 本帖最后由 zxw 于 2011-6-9 08:39 编辑 ]
回复

使用道具 举报

9#
 楼主| 发表于 2011-6-9 09:39:14 | 只看该作者
这下为难了,现在身边没有那台机器,zhaohj 大提出的问题无法测试。

把move保存为(ud)/move这样子可以不?

  1. if "%@root%"=="(fd0,0)" map (fd0) (hd0) && (ud)/move && map --hook && rootnoverify (hd0,0)
复制代码

[ 本帖最后由 chiannet 于 2011-6-9 09:43 编辑 ]
回复

使用道具 举报

10#
发表于 2011-6-9 09:47:29 | 只看该作者
原帖由 zxw 于 2011-6-9 08:36 发表
何必这么麻烦?直接这样就行了。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)


你这样会出问题的,比如进入PE后对(hd0)硬盘进行磁盘分区等操作,将会出现严重问题。
曾经一个外置型PE,象上面的情况,我使用这个PE实机操作:进入PE,硬盘分区,PE下安装系统,重启,失败!

原帖由 chiannet 于 2011-6-9 09:39 发表
这下为难了,现在身边没有那台机器,zhaohj 大提出的问题无法测试。

把move保存为(ud)/move这样子可以不?

if "%@root%"=="(fd0,0)" map (fd0) (hd0) && (ud)/move && map --hook && rootnoverify (hd0,0)


这样当然没问题。

[ 本帖最后由 zhaohj 于 2011-6-9 09:54 编辑 ]
回复

使用道具 举报

11#
 楼主| 发表于 2011-6-9 09:52:02 | 只看该作者
zhaohj 大,把move保存为(ud)/move这样子可以不?
回复

使用道具 举报

12#
发表于 2011-6-9 09:55:51 | 只看该作者
原帖由 chiannet 于 2011-6-9 09:52 发表
zhaohj 大,把move保存为(ud)/move这样子可以不?


当然可以,指定路径什么情况下都可以的。
回复

使用道具 举报

13#
 楼主| 发表于 2011-6-9 09:58:21 | 只看该作者

回复 #12 zhaohj 的帖子

越发觉得grub4dos这课要恶补了。本地与PXE都离不开它。
回复

使用道具 举报

14#
发表于 2011-6-9 10:05:30 | 只看该作者
原帖由 zhaohj 于 2011-6-9 09:47 发表


QUOTE:
原帖由 zxw 于 2011-6-9 08:36 发表
何必这么麻烦?直接这样就行了。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)


你这样会出问题的,比如进入PE后对(hd0)硬盘进行磁盘分区等操作,将会出现严重问题。
曾经一个外置型PE,象上面的情况,我使用这个PE实机操作:进入PE,硬盘分区,PE下安装系统,重启,失败!

嗯,这个倒没有注意,学习了。
回复

使用道具 举报

15#
发表于 2011-6-9 17:00:27 | 只看该作者
move:
!BAT
set /a hd=*0x475&0xff+0x7f
if %hd%==127 exit
:move
set /a hd1=%hd%+1
map (%hd%) (%hd1%)
set /a hd=%hd%-1
checkrange 0x7f calc %hd% || goto :move
map --hook
exit

title  启动U盘可见区 2003PE
find --set-root /AXPE/SETUPLDR.BIN
if "%@root%"=="(fd0,0)" && move && map (fd0) (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
chainloader /AXPE/SETUPLDR.BIN

你测试一下,估计一个map --rehook能解决问题
===============
经过测试,map --rehook不能少,不然无法root
上面作为最终答案。

============
对hhh333的答案也表示怀疑,在rootnoverify (hd0,0)前应该进行map --rehook

[ 本帖最后由 zhaohj 于 2011-6-10 09:11 编辑 ]
回复

使用道具 举报

16#
发表于 2011-6-10 09:44:31 | 只看该作者

回复 #15 zhaohj 的帖子

按照15楼的方式,不知为何map (fd0) (hd0)未生效。命令行下查看,(hd0)已map成(hd1)。
move 位于UD区,加载了gfxmenu (ud)/message

[ 本帖最后由 mygamexxx 于 2011-6-10 09:46 编辑 ]
回复

使用道具 举报

17#
发表于 2011-6-10 10:03:39 | 只看该作者
如果还不生效,怀疑map (fd0) (hd0)这句话有问题,改成:
if "%@root%"=="(fd0,0)" && move && map () (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
回复

使用道具 举报

18#
发表于 2011-6-10 10:46:18 | 只看该作者
怪事,直接map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /ldrxpe可以成功启动PE
换成map (hd0) (hd) && map --hook  && map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /ldrxpe 启动PE时出错,好像是提示无法打开multi(0)disk(0)rdisk(0)partition(1) 什么的。

问题重现,使用了move后,发现map (fd0) (hd0)未生效,手动于命令行下map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /ldrxpe启动PE时出错,提示无法打开multi(0)disk(0)rdisk(0)partition(1)什么的。
改成17楼的命令结果相同。

再次试验:
试验1
map (hd0) (hd)
map (fd0) (hd0)
map --hook
root (hd0,0)
chainloader /ldrxpe
boot
启动PE正常。
试验2
map (hd0) (hd)
map --hook
map (fd0) (hd0)
map --hook
root (hd0,0)
chainloader /ldrxpe
boot
启动PE提示无法打开multi(0)disk(0)rdisk(0)partition(1)

只差一个map --hook命令啊。

不知使用map命令后,三键重启是否能复位到物理开机状态。

[ 本帖最后由 mygamexxx 于 2011-6-11 12:00 编辑 ]
回复

使用道具 举报

19#
 楼主| 发表于 2011-6-10 14:08:21 | 只看该作者

回复 #18 mygamexxx 的帖子

楼上的兄弟,这样子改改move会怎样呢?move:
  1. !BAT
  2. set /a hd=*0x475&0xff+0x7f
  3. if %hd%==127 exit
  4. :move
  5. set /a hd1=%hd%+1
  6. map (%hd%) (%hd1%)
  7. set /a hd=%hd%-1
  8. checkrange 0x7f calc %hd% || goto :move
  9. exit
复制代码
if "%@root%"=="(fd0,0)" && move && map () (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)

[ 本帖最后由 chiannet 于 2011-6-10 14:27 编辑 ]
回复

使用道具 举报

20#
 楼主| 发表于 2011-6-10 14:09:43 | 只看该作者
我现在在外面,没有办法测试。
回复

使用道具 举报

21#
发表于 2011-6-10 14:28:40 | 只看该作者
虚拟机U盘以硬盘形式启动,只能实机测试,汗

试验1
15楼的 move 去掉map --hook一句,放置于ud区
菜单:
title   启动 WINPE
(ud)/move
map (fd0) (hd0)
map --hook
root (hd0,0)
chainloader /boot/ldrxpe
启动PE正常(不去掉map --hook一句启动PE提示无法打开multi(0)disk(0)rdisk(0)partition(1))

试验2
19楼的 move,放置于ud区
菜单:
title   启动 WINPE
(ud)/move
map (fd0) (hd0)
map --hook
root (hd0,0)
chainloader /boot/ldrxpe
启动PE提示无法打开multi(0)disk(0)rdisk(0)partition(1)

不知为什么,菜单中使用 if "%@root%"=="(fd0,0)" && (ud)/move && map () (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)执行后
(ud)/move 后的语句好像不起作用,今天刚下载的C大最新的grldr(2011.06.07)。
我想应该是if这一句在我这里不起作用,我fbinst的grldr内置菜单如下:
debug off
timeout 0
default 0
title
calc *0x82b8>>8&0xff-0x80 || configfile (ud)/menu_ud1.lst
calc *0x82b8>>8&0xff-0x80 && configfile (ud)/menu_ud0.lst

外置菜单menu_ud0.lst内容如下:
timeout 30
default 1
gfxmenu (ud)/message0
configfile (md)4+3
title   正以 USB-ZIP 方式启动
clear
title   启动 WINPE(老机器先加载 plpbt 支持 USB2.0)
if "%@root%"=="(fd0,0)"  (ud)/move && map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)
#(ud)/move
#map (fd0) (hd0)
#map --hook
#root (hd0,0)
commandline
#chainloader /boot/ldrxpe

[ 本帖最后由 mygamexxx 于 2011-6-10 15:03 编辑 ]
回复

使用道具 举报

22#
 楼主| 发表于 2011-6-10 14:36:42 | 只看该作者

回复 #21 mygamexxx 的帖子

move 的内容
  1. !BAT
  2. set /a hd=*0x475&0xff+0x7f
  3. if %hd%==127 exit
  4. :move
  5. set /a hd1=%hd%+1
  6. map (%hd%) (%hd1%)
  7. set /a hd=%hd%-1
  8. checkrange 0x7f calc %hd% || goto :move
  9. exit
复制代码



if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)

看了18楼的TEST1与test2我觉得这样子是可以了!
回复

使用道具 举报

23#
 楼主| 发表于 2011-6-10 16:58:10 | 只看该作者

回复 #21 mygamexxx 的帖子

22楼也失败了:ntdetect failed
回复

使用道具 举报

24#
发表于 2011-6-10 17:25:06 | 只看该作者
map --hook && map --rehook

这样也会失败?
回复

使用道具 举报

25#
 楼主| 发表于 2011-6-10 17:32:42 | 只看该作者
测试的结果:
MOVE 内容:
  1. !BAT
  2. set /a hd=*0x475&0xff+0x7f
  3. if %hd%==127 exit
  4. :move
  5. set /a hd1=%hd%+1
  6. map (%hd%) (%hd1%)
  7. set /a hd=%hd%-1
  8. checkrange 0x7f calc %hd% || goto :move
  9. exit
复制代码
TEST1
  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE
  4. title  2003PE
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
  7. chainloader /AXPE/SETUPLDR.BIN
复制代码
用以上测试:NTDETECT failed



TEST2

事先运行(ud)/usb_acc.0pe  ##运行到这里时手动输入0,选择ptplt 5.10.2版驱动
在执行下列外置菜单
  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE

  4. title  2003PE
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
  7. chainloader /AXPE/SETUPLDR.BIN
复制代码
用以上测试:PE启动了!!USB鼠标灯不亮,无鼠标指针!而USB键盘正常工作。能看到本地硬盘。

TEST3
  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE
  4. title  2003PE
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)
  7. chainloader /AXPE/SETUPLDR.BIN
复制代码
用以上测试:PE启动正常了。键盘鼠标、硬盘都正常。

TEST4

事先运行(ud)/usb_acc.0pe  ##运行到这里时手动输入0,选择ptplt 5.10.2版驱动
在执行下列外置菜单
  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE
  4. title  2003PE
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)
  7. chainloader /AXPE/SETUPLDR.BIN
复制代码
用以上测试:PE启动了。!!USB鼠标灯不亮,无鼠标指针!而USB键盘正常工作。能看到本地硬盘。

[ 本帖最后由 chiannet 于 2011-6-10 17:39 编辑 ]
回复

使用道具 举报

26#
发表于 2011-6-10 17:53:55 | 只看该作者
TEST1失败真想不通。另ptplt的先别管。
你下面执行后
if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && map --rehook
看看 map --status
再 ls  (hd0,0)/   
内容正确吗?
map (fd0) (hd0)改成map () (hd0) 会怎么样?
回复

使用道具 举报

27#
 楼主| 发表于 2011-6-10 18:54:49 | 只看该作者

回复 #26 zhaohj 的帖子

以下move的内容同24楼


  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE

  4. title  test1
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && map --rehook
  7. map --status
  8. ls  (hd0,0)/
  9. pause



  10. title  test2
  11. find --set-root /AXPE/SETUPLDR.BIN
  12. if "%@root%"=="(fd0,0)" (ud)/move && map () (hd0) && map --hook && map --rehook
  13. map --status
  14. ls  (hd0,0)/   
  15. pause
复制代码
TEST1运行结果图




TEST2运行结果图:



两次结果一样啊。显示的都是本地硬盘第一分区的内容

[ 本帖最后由 chiannet 于 2011-6-10 18:57 编辑 ]
回复

使用道具 举报

28#
发表于 2011-6-11 10:58:52 | 只看该作者
没看到80硬盘,说明map (fd0) (hd0)没起作用。
下午我做一个实验,把这个问题搞清楚。
回复

使用道具 举报

29#
 楼主| 发表于 2011-6-11 11:16:53 | 只看该作者

回复 #28 zhaohj 的帖子

下午我有空,可提供测试。咱们可联机,力争彻底解决这个问题。
回复

使用道具 举报

30#
发表于 2011-6-11 11:53:51 | 只看该作者

回复 #25 chiannet 的帖子

U启时电脑把U盘识别成(fd0)然后加载PLPBT驱动后电脑就会把U盘识别成(hd0).
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-27 22:06

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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