无忧启动论坛

标题: UD识别为USB-zip时如何引导可见区PE!HHH333一语点破玄机。zhaohj进一步完善。 [打印本页]

作者: chiannet    时间: 2011-6-8 21:46
标题: UD识别为USB-zip时如何引导可见区PE!HHH333一语点破玄机。zhaohj进一步完善。
最佳答案: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 编辑 ]
作者: dgxhls    时间: 2011-6-8 22:55
试试:
title  启动U盘可见区 2003PE
find --set-root /AXPE/SETUPLDR.BIN
chainloader /AXPE/SETUPLDR.BIN
作者: chiannet    时间: 2011-6-9 06:03
标题: 回复 #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 编辑 ]
作者: hhh333    时间: 2011-6-9 06:31
标题: 回复 #3 chiannet 的帖子
肯定是出现了fd0,0的情况,这个问题我有详细说明,请看反馈帖,你要加如下语句,可以放预执行区。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map (hd0) (hd) && map --hook && rootnoverify (hd0,0)
作者: chiannet    时间: 2011-6-9 06:41
标题: 回复 #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 编辑 ]
作者: chiannet    时间: 2011-6-9 06:49
标题: 回复 #4 hhh333 的帖子
用上面的菜单,无论UD被识别为USB-HDD还是USB-ZIP都没问题了



[ 本帖最后由 chiannet 于 2011-6-9 07:03 编辑 ]
作者: zhaohj    时间: 2011-6-9 08:09
但也不够严谨,如不存在(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
作者: zxw    时间: 2011-6-9 08:36
何必这么麻烦?直接这样就行了。
if "%@root%"=="(fd0,0)" map (fd0) (hd0) && map --hook && rootnoverify (hd0,0)

[ 本帖最后由 zxw 于 2011-6-9 08:39 编辑 ]
作者: chiannet    时间: 2011-6-9 09:39
这下为难了,现在身边没有那台机器,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 编辑 ]
作者: zhaohj    时间: 2011-6-9 09:47
原帖由 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 编辑 ]
作者: chiannet    时间: 2011-6-9 09:52
zhaohj 大,把move保存为(ud)/move这样子可以不?
作者: zhaohj    时间: 2011-6-9 09:55
原帖由 chiannet 于 2011-6-9 09:52 发表
zhaohj 大,把move保存为(ud)/move这样子可以不?


当然可以,指定路径什么情况下都可以的。
作者: chiannet    时间: 2011-6-9 09:58
标题: 回复 #12 zhaohj 的帖子
越发觉得grub4dos这课要恶补了。本地与PXE都离不开它。
作者: zxw    时间: 2011-6-9 10:05
原帖由 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下安装系统,重启,失败!

嗯,这个倒没有注意,学习了。
作者: zhaohj    时间: 2011-6-9 17:00
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 编辑 ]
作者: mygamexxx    时间: 2011-6-10 09:44
标题: 回复 #15 zhaohj 的帖子
按照15楼的方式,不知为何map (fd0) (hd0)未生效。命令行下查看,(hd0)已map成(hd1)。
move 位于UD区,加载了gfxmenu (ud)/message

[ 本帖最后由 mygamexxx 于 2011-6-10 09:46 编辑 ]
作者: zhaohj    时间: 2011-6-10 10:03
如果还不生效,怀疑map (fd0) (hd0)这句话有问题,改成:
if "%@root%"=="(fd0,0)" && move && map () (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
作者: mygamexxx    时间: 2011-6-10 10:46
怪事,直接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 编辑 ]
作者: chiannet    时间: 2011-6-10 14:08
标题: 回复 #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 编辑 ]
作者: chiannet    时间: 2011-6-10 14:09
我现在在外面,没有办法测试。
作者: mygamexxx    时间: 2011-6-10 14:28
虚拟机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 编辑 ]
作者: chiannet    时间: 2011-6-10 14:36
标题: 回复 #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我觉得这样子是可以了!
作者: chiannet    时间: 2011-6-10 16:58
标题: 回复 #21 mygamexxx 的帖子
22楼也失败了:ntdetect failed
作者: zhaohj    时间: 2011-6-10 17:25
map --hook && map --rehook

这样也会失败?
作者: chiannet    时间: 2011-6-10 17:32
测试的结果:
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 编辑 ]
作者: zhaohj    时间: 2011-6-10 17:53
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) 会怎么样?
作者: chiannet    时间: 2011-6-10 18:54
标题: 回复 #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 编辑 ]
作者: zhaohj    时间: 2011-6-11 10:58
没看到80硬盘,说明map (fd0) (hd0)没起作用。
下午我做一个实验,把这个问题搞清楚。
作者: chiannet    时间: 2011-6-11 11:16
标题: 回复 #28 zhaohj 的帖子
下午我有空,可提供测试。咱们可联机,力争彻底解决这个问题。
作者: zhuyoucheng    时间: 2011-6-11 11:53
标题: 回复 #25 chiannet 的帖子
U启时电脑把U盘识别成(fd0)然后加载PLPBT驱动后电脑就会把U盘识别成(hd0).
作者: mygamexxx    时间: 2011-6-11 11:54
从我自己测试过程看,可能是&&操作符不起作用,如果不用操作符,完全执行每条命令无此问题。不过为什么move中使用了map --hook生效后,再map (fd0) (hd0)然后map --hook,可在命令行下查看到map成功,但为什么PE启动会出错?

不过无多硬盘条件无法测试move的多硬盘效果。

目前成功的过程:
(ud)/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
exit

fd(0,0)启动的菜单:
title   启动 WINPE
(ud)/move
map (fd0) (hd0)
map --hook
root (hd0,0)
chainloader /boot/ldrxpe

这样U盘可见分区上的pe3.0和pe1.X启动均成功

[ 本帖最后由 mygamexxx 于 2011-6-11 12:24 编辑 ]
作者: chiannet    时间: 2011-6-11 12:45
标题: 回复 #31 mygamexxx 的帖子
25楼test3说明与操作符“&&”没有关系

是不是(ud)/move没有执行到合理的结果,导致其后的&&的内容没执行?

[ 本帖最后由 chiannet 于 2011-6-11 12:47 编辑 ]
作者: mygamexxx    时间: 2011-6-11 12:54
是不是(ud)/move没有执行到合理的结果,导致其后的&&的内容没执行?

经测试,确定如此,只要有move后面的&&就不会执行。

(ud)/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
exit

fd(0,0)启动的菜单:
title   启动 WINPE
(ud)/move
map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /boot/ldrxpe

启动成功,会不会是批处理执行后不返回成功与否的信息?因为批处理中无论什么情况最后执行的都是exit。

再测试
(ud)/move || map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /boot/ldrxpe
启动成功,(hd0)成功变成了(hd1),(fd0)成功变成了(hd0)
(ud)/move && map (fd0) (hd0) && map --hook && root (hd0,0) && chainloader /boot/ldrxpe
启动不成功,move后面全部未执行。

哈哈,move 执行结果信息刚好相反。至此,问题应该全部解决了!!!

[ 本帖最后由 mygamexxx 于 2011-6-11 13:45 编辑 ]
作者: chiannet    时间: 2011-6-11 13:22
标题: 回复 #33 mygamexxx 的帖子
(ud)/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
复制代码



  1. title  2003PE (非UD区)
  2. find --set-root /AXPE/SETUPLDR.BIN
  3. if "%@root%"=="(fd0,0)" (ud)/move && map (fd0) (hd0) && map --hook && map --rehook &&  rootnoverify (hd0,0)
  4. chainloader /AXPE/SETUPLDR.BIN
复制代码



成功了!!!!!!!
作者: mygamexxx    时间: 2011-6-11 13:27
标题: 回复 #34 chiannet 的帖子
还是有点小疑问,如果去掉exit(或者不去掉exit),出现无硬盘或多硬盘的情况不知会不会执行正常?
因为批处理中有 if %hd%==127 exit 这一句。这需要 zhaohj 大大来下结论。

[ 本帖最后由 mygamexxx 于 2011-6-11 13:30 编辑 ]
作者: zhaohj    时间: 2011-6-11 13:30
下面分析move是否成功
1:把move改成map后生效:
!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 --rehook
exit
2:move前后对比:

[ 本帖最后由 zhaohj 于 2011-6-11 13:32 编辑 ]

Snap1.jpg (29.66 KB, 下载次数: 189)

move前硬盘状态

move前硬盘状态

Snap2.jpg (41.36 KB, 下载次数: 174)

move后硬盘状态

move后硬盘状态

作者: mygamexxx    时间: 2011-6-11 13:40
标题: 回复 #36 zhaohj 的帖子
move 中如果生效(无论使用map --hook还是map --rehook),后面再进行map (fd0) (hd0),启动PE时均会提示setupldr:can't open multi(0)disk(0)rdisk(0)partition(1)
作者: chiannet    时间: 2011-6-11 13:41
(ud)/movv 的内容:


  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. map --rehook
  10. exit
复制代码
以下两次pause,得到的结果与27楼图片一样。

  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE
  4. title  test
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. map --status
  7. ls  (hd0,0)/
  8. pause
  9. if "%@root%"=="(fd0,0)" (ud)/movv && map (fd0) (hd0) && map --hook && map --rehook
  10. map --status
  11. ls  (hd0,0)/
  12. pause
复制代码

作者: chiannet    时间: 2011-6-11 13:45
(ud)/movv 的内容:
  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
复制代码
以下两次pause,

第一次ls  (hd0,0)/是本地硬盘的内容。
第二次ls  (hd0,0)/是USB可见区的内容。
  1. timeout 10
  2. default 3
  3. gfxmenu (bd)/IMGS/MESSAGE
  4. title  test
  5. find --set-root /AXPE/SETUPLDR.BIN
  6. map --status
  7. ls  (hd0,0)/
  8. pause
  9. if "%@root%"=="(fd0,0)" (ud)/movv && map (fd0) (hd0) && map --hook && map --rehook
  10. map --status
  11. ls  (hd0,0)/
  12. pause
复制代码

[ 本帖最后由 chiannet 于 2011-6-11 13:49 编辑 ]
作者: zhaohj    时间: 2011-6-11 13:47
再进一步测试,发现if ....运行P处理后&& 后面的语句没有执行:
我是pxe启动的,move成功执行了,但后面的语句没运行
if '%@root%"=="(pd)" /test/move.bat && uuid && echo ok

==================
1:把P处理改成以前一样 (不要map --kook)

2:
title  2003PE (非UD区)
find --set-root /AXPE/SETUPLDR.BIN
if "%@root%"=="(fd0,0)" (ud)/move
if "%@root%"=="(fd0,0)"  map (fd0) (hd0) && map --hook &&  rootnoverify (hd0,0)
chainloader /AXPE/SETUPLDR.BIN

不过建议把map --hook改成map --rehook比较好

[ 本帖最后由 zhaohj 于 2011-6-11 13:58 编辑 ]

Snap3.jpg (21.71 KB, 下载次数: 175)

Snap3.jpg

作者: chiannet    时间: 2011-6-11 13:52
标题: 回复 #40 zhaohj 的帖子
好,你给个适用于·解决此问题的标准move和应用代码吧。好结束此帖。
作者: mygamexxx    时间: 2011-6-11 13:53
标题: 回复 #40 zhaohj 的帖子
改成if '%@root%"=="(pd)" /test/move.bat || uuid && echo ok肯定能执行。同时请看一下37楼是什么原因。

[ 本帖最后由 mygamexxx 于 2011-6-11 13:55 编辑 ]
作者: zhaohj    时间: 2011-6-11 14:07
问题的原因找到了,是用在P处理的exit命令导致的,把P处理改一下,这个问题结贴:
move:
!BAT
set /a hd=*0x475&0xff+0x7f
if %hd%==127 goto :eof
:move
set /a hd1=%hd%+1
map (%hd%) (%hd1%)
set /a hd=%hd%-1
checkrange 0x7f calc %hd% || goto :move

-------------
title  2003PE (非UD区)
find --set-root /AXPE/SETUPLDR.BIN
if "%@root%"=="(fd0,0)"  (ud)/move && map (fd0) (hd0) && map --rehook &&  rootnoverify (hd0,0)
chainloader /AXPE/SETUPLDR.BIN
作者: chiannet    时间: 2011-6-11 14:25
标题: 回复 #43 zhaohj 的帖子
是的,43楼是可以的。
move:
  1. !BAT
  2. set /a hd=*0x475&0xff+0x7f
  3. if %hd%==127 goto :eof
  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. map --rehook
复制代码


这样也不行,会提示disk read error




所以43楼是标准兼最佳答案!
作者: zhaohj    时间: 2011-6-11 14:37
关于plpbt问题,你先测试一下运行前后的uuid状态,今天有空看看能否解决
uuid
usb2加速器
uuid
你把前后结果贴个图
作者: chiannet    时间: 2011-6-11 14:40
好的。我正好准备提此问题的。我估计不一定是plpbt本身,也许是P大的USB_ACC.0pe调整所致。我在备料。
作者: chiannet    时间: 2011-6-11 14:56

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

  4. title  test
  5. uuid
  6. pause
  7. (ud)/USB_ACC.0PE
复制代码
我运行时(ud)/USB_ACC.0PE,是输入0,即选择5.10版驱动。
USB_ACC.0PE有个特性,加载了驱动后,会立即自动再次加载grldr菜单,图一是加载前,图二是加载后。







[ 本帖最后由 chiannet 于 2011-6-11 14:57 编辑 ]
作者: zhaohj    时间: 2011-6-11 15:16
从上图可以看出,USB_ACC.0PE运行后,把第一硬盘覆盖了。
下面我们来分析一下
1:加载USB2.0加快老机器运行速度
因为USB_ACC.0PE要覆盖第一硬盘,先move(当然这个move后面要加map --hook)
(ud)/MOVE
(ud)/USB_ACC.0PE
如果原来有一个硬盘,则变成 (hd0) (hd1),其中的(hd1)是原来的第一硬盘,(hd0)是USB_ACC.0PE生成的。

move:
!BAT
set /a hd=*0x475&0xff+0x7f
if %hd%==127 goto :eof
:move
set /a hd1=%hd%+1
map (%hd%) (%hd1%)
set /a hd=%hd%-1
checkrange 0x7f calc %hd% || goto :move
map --hook

你先看看这个结果是否正确?即在命令行下uuid
另,我很怀疑第二幅图,P大不会不考虑覆盖第一硬盘的情况。

[ 本帖最后由 zhaohj 于 2011-6-11 15:24 编辑 ]
作者: mygamexxx    时间: 2011-6-11 15:28
标题: 回复 #48 zhaohj 的帖子
5.10版有此情况(原(hd0)硬盘看不到),以后的版本改进了,但不如5.10版好用。先move应能解决此问题。
使用加速器后在我的机器上启动pe1.x会在pe启动过程中黑屏很长时间(十几分钟,但不是死机,最后可成功启动),可能是硬盘检测?启动pe3.0倒没有异常。

[ 本帖最后由 mygamexxx 于 2011-6-11 15:33 编辑 ]
作者: zhaohj    时间: 2011-6-11 15:36
原帖由 mygamexxx 于 2011-6-11 15:28 发表
5.10版有此情况(原(hd0)硬盘看不到),以后的版本改进了,但不如5.10版好用。先move应能解决此问题。


如果这样,先判断这个版本是5.10,是就先move

另,这个(hd0,0)有什么内容?是否一定要占用不放(即不能再动它的位置)?
作者: mygamexxx    时间: 2011-6-11 15:39
标题: 回复 #50 zhaohj 的帖子
(hd0,0)就是U盘可见分区内容。
作者: zhaohj    时间: 2011-6-11 15:45
原帖由 mygamexxx 于 2011-6-11 15:39 发表
(hd0,0)就是U盘可见分区内容。


这是个好消息啊
如果是usb-zip,即可见区识别为(fd0,0)的情况会怎样?
--------------
如果(hd0,0)就是U盘可见分区内容,那就简单了。
作者: chiannet    时间: 2011-6-11 15:49
25楼test2test4启动PE还是没事,就是找不到USB鼠标,怎么解释?

[ 本帖最后由 chiannet 于 2011-6-11 15:51 编辑 ]
作者: mygamexxx    时间: 2011-6-11 15:54
(fd0,0)运行加速器后会变成(hd0,0),plpbt加载后可能设置与USB鼠标等有冲突,杯具啊,刚才测试,在用FBINSTTOOL拖入文件时突然U盘数据全部丢失,变成未格式化,只好重新格式化。还好,U盘没坏掉。我是读卡器加TF卡,上次插到别人的电脑中,正在拷贝东西,突然坏掉,竟然是读卡器坏掉,还好TF卡没坏。
第一种情况
加载5.10版plpbt,后进入G4D命令行,U盘可见分区(fd0,0)变成(hd0,0), 原(hd0,0)被覆盖。
加载5,12版plpbt,后进入G4D命令行,U盘可见分区(fd0,0)变成(hd0,0), 原(hd0,0)变成(hd1,0)。
第二种情况
加载5.10版plpbt,后进入G4D命令行,U盘可见分区(hd0,0)还是(hd0,0), 本地硬盘可能是(hd1,0)。
加载5,12版plpbt,后进入G4D命令行,U盘可见分区(hd0,0)还是(hd0,0), 本地硬盘可能是(hd1,0)。

[ 本帖最后由 mygamexxx 于 2011-6-11 16:11 编辑 ]
作者: chiannet    时间: 2011-6-11 16:05
标题: 回复 #48 zhaohj 的帖子
先move,再加速,原Hd0成了hd1。HD0的内容就是47楼图二拿一行





[ 本帖最后由 chiannet 于 2011-6-11 16:10 编辑 ]
作者: zhaohj    时间: 2011-6-11 16:31
plpbt的问题,你们自己处理吧。
运行加速器后,给个标志,后面就不用move了。usb键鼠标问题,那肯定是加速器造成的。

如果你们认为5.1的plpbt比较好,那我可以改进一下P大的这个加速器。

你可以上传到此。

[ 本帖最后由 zhaohj 于 2011-6-11 16:43 编辑 ]
作者: 2011kinglong    时间: 2011-6-22 22:25
标题: 求教
研究了chiannet大的自由天空UD版菜单,发现 "%@root%"=="(fd0,0)",写法,查阅帮助文件找不到"%@root%"的解释,求教各位老大,谢谢!
作者: hnzz110    时间: 2011-9-23 13:23
同问
另外,一个只支持USB-ZIP的机器,用sbinst格式化的U盘,启动到GRUB4DOS菜单时,按E进入编辑一个条目,再编辑其他条目包括再回过来编辑此条目时,发现 "%@root%"的值由(fd0,0)变为(ud),为什么?
真心求教,多谢
作者: 2011willinguo    时间: 2012-2-18 08:22
看不懂啊看不懂
老大教我代码怎么用啊?




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