无忧启动论坛

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

A new branch of 0PE

[复制链接]
1321#
发表于 2012-5-10 18:19:49 | 只看该作者
map --mem (bd)/0PE/%XPor03%/NATIVE.LZMA (11)
map --hook
(hd-1,0)/BIN/CPYFILES.BAT (11)/WXPE/SYSTEM32/ (hd-1,0)/WXPE/SYSTEM32/
(hd-1,0)/BIN/CPYFILES.BAT (11)/WXPE/SYSTEM32/DRIVERS/ (hd-1,0)/WXPE/SYSTEM32/DRIVERS/
map --unmap=11
map --rehook

会不会这里有点问题
map --mem ... (11)   表示map起来
map --unmap=11  表示取消map
map --rehook 表示前面的都有效,。。。。。那么到底是map起来,还是不map起来呢?
我是不看教程的菜鸟,乱猜的,哈

[ 本帖最后由 zjzaog 于 2012-5-10 18:25 编辑 ]
回复

使用道具 举报

1322#
发表于 2012-5-10 18:33:32 | 只看该作者
原帖由 chenmaochun 于 2012-5-10 16:53 发表
还是会卡住,崩溃了!

卡住的照片拍一张,有助于分析
回复

使用道具 举报

1323#
发表于 2012-5-10 19:04:52 | 只看该作者
前几天我在单位用P大的0PE-NBv1.4.2试了一台联想的机器,型号没注意看,记忆中好象03PE能顺利启动.XPPE不能通过,也是卡在native.lzma这里拉.
回复

使用道具 举报

1324#
 楼主| 发表于 2012-5-10 20:42:56 | 只看该作者
原帖由 chenmaochun 于 2012-5-10 16:53 发表
还是会卡住,崩溃了!

看来RP有问题。不过越来越接近真相,快要解开谜底了。

还需继续定位。
附件有3个文件,分别换来试一下。
这3个文件对操作进行不同程度的简化,读native.lzma卡的可能性逐步提高。

读native.lzma测试.part1.rar

400 KB, 下载次数: 32, 下载积分: 无忧币 -2

读native.lzma测试.part2.rar

400 KB, 下载次数: 26, 下载积分: 无忧币 -2

读native.lzma测试.part3.rar

400 KB, 下载次数: 34, 下载积分: 无忧币 -2

读native.lzma测试.part4.rar

400 KB, 下载次数: 34, 下载积分: 无忧币 -2

读native.lzma测试.part5.rar

365.7 KB, 下载次数: 35, 下载积分: 无忧币 -2

回复

使用道具 举报

1325#
发表于 2012-5-10 22:01:59 | 只看该作者
测试1文件,会卡住如下图的界面,不能进入菜单,按不按回车都会卡在那里。

测试2不按回车也会卡在这,但是会多输出一路ok,很奇怪,按回车的话则和上面情况一样


测试3不管按不按回车都进入菜单,开始有2次不卡,但是会出现下图的错误,显示很快,我只能拍到最后一屏的内容,我按空格选择手工选择srs包,我选择1.zip也出现下图的错误,我再次重启就有卡在以前的那个地方,很诡异,我重启几次,都不能够过去,一直卡在以前那个屏幕,1305楼好像发过图!
回复

使用道具 举报

1326#
 楼主| 发表于 2012-5-11 09:06:46 | 只看该作者
辛苦了。
这三个测试主要看Loading /0PE/XP/NATIVE.LZMA...这步能否通过。如果有任何后续显示,无论成败,都表示不卡。测试1已经去掉菜单,不卡的话预期有ok字样提示。

令人惊讶的是三个测试中最简单的测试1也卡在Loading /0PE/XP/NATIVE.LZMA...这步无后续显示。
对此我有点不敢相信,因为这个情形跟上回您进菜单后按c进命令行直接发几个命令访问native.lzma相似。您说那样不会卡,而执行功能相当的.bat批处理则卡。
我曾据此认为批处理方式会带来bug,现在看来不用批处理也有卡的。
请确认一下测试1是卡在Loading /0PE/XP/NATIVE.LZMA...这步,真的无后续ok显示吗?

果真如此的话,我们得进一步简化,提炼出能重现卡住现象的更简单的一组语句。
附件grldr内置了一个更简单的菜单脚本,请用它替换ud里iso外的grldr,ud里的0pe.iso不要动,这个grldr启动时按不按回车效果都应一样。

一个细节:怎样替换ud里的grldr呢?当拖grldr进ud时,如果ud原有grldr,会提问是否覆盖,当然要覆盖,然后提问是否保留原有菜单,请选不保留。
如果选保留,则只更换了(升级了)grldr的程序版本,没有改变内置菜单。
grldr文件包含两部分内容,前面的内容为程序(不同版本程序部分不同),尾部内容为内置菜单。
0pe的grldr内置菜单比较复杂。

迄今的测试结果,没有证明0pe的处理方面有问题,也没有定位出g4d哪里有bug。
有的都是无法解释、足以让人崩溃的诡异。
我现在很担心这个简化的grldr不卡,即问题不好简化,那才难办。

grldr.rar

132.61 KB, 下载次数: 42, 下载积分: 无忧币 -2

回复

使用道具 举报

1327#
发表于 2012-5-11 09:21:05 | 只看该作者

回复 #1330 pseudo 的帖子

看了p 大的留言,我又重新测试了一下测试一,这次测试通过了,的确有ok字样显示,昨天不知是人品问题还是替换的时候弄错了,今天连续测试了2次测试一,都是通过的!而简化的grldr则还是会卡!
更新:我刚刚不放心,又再次重启电脑,测试了一下测试一,居然有卡住了,和昨晚一样,好奇怪!

[ 本帖最后由 chenmaochun 于 2012-5-11 09:26 编辑 ]
回复

使用道具 举报

1328#
发表于 2012-5-11 09:31:45 | 只看该作者
下面这张截图是在0pe.iso里面是测试一文件,grldr是简化版本的情况下执行后的卡住的情形:
回复

使用道具 举报

1329#
发表于 2012-5-11 09:42:17 | 只看该作者
有时卡住,有时不卡?

这里面有随机情况发生。

一种可能的情况是,grub4dos 有 bug,内存有冲突。试试把 lzma 换成 gz,看看情况有没有改变。

另一种可能性是,出现了以前曾经出现过的莫名其妙的硬件问题,CPU 处于不稳定状态,用 pause 等 5 秒则可以缓解这种局面。
回复

使用道具 举报

1330#
发表于 2012-5-11 09:50:31 | 只看该作者

回复 #1333 不点 的帖子

我是acer 4736z笔记本,如果使用其他的pe的话,则需要加e820cycles=0才不会死机,如果默认=-1的话,不会蓝屏,但是会卡死在windows桌面,显卡是intel集成的gma 4500。这个问题你曾经怀疑过是显卡驱动的问题,不只道和这个有关系没有!但是一直使用0pe则不会卡死,使用老版本的也不会有卡住的现象!
回复

使用道具 举报

1331#
发表于 2012-5-11 10:00:30 | 只看该作者
当然了,如果存在 e820cycles 之类的问题,那还是归结为有问题。不过,e820cycles 主要只对 Windows 有影响,而对于 Windows 之前的 grub4dos 自身,应该没有太大影响。

不过,使用 e820cycles 确实代表了一种错误,这种错误的表现可以是任意的、随机的。使用 e820cycles 时,出现任何异常都属于正常现象。

如果 0pe 默认时也使用了 e820cycles,那么出现这种情况就不算奇怪了。
回复

使用道具 举报

1332#
 楼主| 发表于 2012-5-11 10:19:56 | 只看该作者
楼上简化的grldr是对测试1的进一步简化。前者都卡,后者就更卡了。

到目前为止,g4d有bug的可能性越来越大。

附件grldr的简化索性一步到位,现在这个内置菜单最简单了,按情理是不该卡的。注意做这个最简测试不用动、不用换iso,只换ud内iso外的grldr。

若它能重现卡的现象就好了。那样从我们的角度,就已经确认找到g4d的bug了。我们的测试结束了。
接下来就得不点、chenall大他们去解决了。请保留ud里的0pe.iso不动,留待他们研究。

如果这个最简单的菜单不卡,反而有点郁闷,要在这两个grldr之间的差异中继续寻找卡的原因。

[ 本帖最后由 pseudo 于 2012-5-11 10:25 编辑 ]

grldr.rar

132.24 KB, 下载次数: 47, 下载积分: 无忧币 -2

回复

使用道具 举报

1333#
发表于 2012-5-11 10:31:41 | 只看该作者
一个幽灵,一个NATIVE.LZMA幽灵在0PE游荡,它像风,像雨又像雾。我一直跟踪者P大作出的不懈努力。chenmaochun又验证了UD启动中的异常。令人费解的是在我的台式机上测试都正常,笔记本就不正常,和chenmaochun一样(我是HDD启动),随机出现。似乎和硬件有关。但好像又不是,因为早期0PE未发现此现象,自1.4.2开始才出现。有怀疑g4d,但用最新的grldr测试1.2.6/1.4.1却正常,真纳闷。

[ 本帖最后由 2010XwX 于 2012-5-11 10:36 编辑 ]
回复

使用道具 举报

1334#
 楼主| 发表于 2012-5-11 10:48:34 | 只看该作者

回复 #1337 2010XwX 的帖子

难得2010XwX兄弟也有能重现此现象的机器。如果方便,也请测试一下:

iso不动,iso外grldr换#1336楼的看看读native.lzma这步卡不卡,即看
Loading /0PE/XP/NATIVE.LZMA...
这步有无后续显示。

如果卡,因为它的菜单最简,就定论g4d有bug了。
如果不卡(须数次证实),再换#1330楼的试试。
前面chenmaochun兄弟发现#1330楼的会卡。#1330楼的也算比较简单菜单。
回复

使用道具 举报

1335#
发表于 2012-5-11 11:00:33 | 只看该作者
让人意外的结果产生了,用了p 大最后上传的 grldr后,测试不下20次,没有一次卡住,测试结果如下图:
回复

使用道具 举报

1336#
 楼主| 发表于 2012-5-11 11:04:21 | 只看该作者

回复 #1333 不点 的帖子

待反馈的#1336楼的grldr内置菜单最简最纯。
其实#1330楼已经比较简单差不多能说明问题,它没有e820cycles字样。

直感(猜想)可能是这样的问题:
native.lzma体积3465109字节非4kb/2kb/1kb/512字节整数倍,读尾部时若以扇区或块为单位,可能越界(例如超出iso范围),因访问了不适当的地方或找不到预期结尾标志等而卡死。


刚得到#1339楼chenmaochun 网友反馈。总结一下现在情况:
1、部署方式:
用mkisofs生成0pe.iso(体积50mb以上),ud里放入两个文件0pe.iso和grldr,整理ud碎片。
2、在chenmaochun 网友机器上,当ud里iso外的grldr的内置菜单为:

  1. echo mapping /0PE.ISO...
  2. map /0PE.ISO (0xff) || pause Error: Fail to map /0PE.ISO (0xff). && reboot
  3. map --hook
  4. rootnoverify (0xff)
  5. echo Loading /0PE/0PENB.LZMA from %@root%...
  6. map --mem ()/0PE/0PENB.LZMA (hd)
  7. map --hook
  8. echo Loading /0PE/XP/NATIVE.LZMA...
  9. map --mem /0PE/XP/NATIVE.LZMA (11) || pause Error occurred while loading /0PE/XP/NATIVE.LZMA. && reboot
  10. map --hook || pause warning:map --hook
  11. ls (11)/
  12. pause NATIVE.LZMA is okokokokokokokokok,game over.
复制代码

可以看到game over字样。
而当grldr的内置菜单为:

  1. terminal console
  2. debug off
  3. font
  4. echo -e \n\nPress a key within 3 seconds:
  5. echo -e \n\t<Enter>--Show/Hide Menu\n\t<Esc>--Grub4Dos Commandline\n\t<Space>--Load 0PE.ISO into memory entirely\n
  6. set keyt=
  7. pause --wait=3 && set /A keyt=*0x4CB00
  8. if not exist keyt commandline
  9. checkrange 524:-1 calc *0x413 & 0xffff || map --int15nolow=1 && pause Warnning: less memory
  10. default 0
  11. timeout 0
  12. #0
  13. title
  14. echo mapping /0PE.ISO...
  15. map /0PE.ISO (0xff) || pause Error: Fail to map /0PE.ISO (0xff). && reboot
  16. map --hook
  17. rootnoverify (0xff)
  18. dd if=(md) of=(md) bs=1 count=8 skip=0x829c seek=0x60130
  19. echo
  20. echo Loading /0PE/0PENB.LZMA from %@root%...
  21. map --mem ()/0PE/0PENB.LZMA (hd)
  22. map --hook
  23. goto 1
  24. #1
  25. title
  26. dd if=(md) of=(md) bs=1 count=4 skip=0x60130 seek=0x8208
  27. dd if=(md) of=(md) bs=1 count=4 skip=0x60134 seek=0x8280
  28. root (bd) || echo -n
  29. set *
  30. command --set-path=(hd-1,0)/BIN/
  31. set XPor03=XP
  32. echo Loading /0PE/%XPor03%/NATIVE.LZMA...
  33. map --mem (bd)/0PE/%XPor03%/NATIVE.LZMA (11) || map --mem (0xff)/0PE/%XPor03%/NATIVE.LZMA (11) || pause Error occurred while loading /0PE/%XPor03%/NATIVE.LZMA. && reboot
  34. map --hook || pause warning:map --hook
  35. (hd-1,0)/BIN/CPYFILES.BAT (11)/WXPE/SYSTEM32/ (hd-1,0)/WXPE/SYSTEM32/ || pause warning:system32
  36. (hd-1,0)/BIN/CPYFILES.BAT (11)/WXPE/SYSTEM32/DRIVERS/ (hd-1,0)/WXPE/SYSTEM32/DRIVERS/ || pause warning:drivers
  37. map --unmap=11 && map --rehook
  38. pause NATIVE.LZMA is okokokokokokokokok,game over.
复制代码

则在出现
Loading /0PE/0PENB.LZMA from (hd127)...
后卡住,无后续显示。

[ 本帖最后由 pseudo 于 2012-5-11 11:18 编辑 ]
回复

使用道具 举报

1337#
发表于 2012-5-11 11:12:57 | 只看该作者
pseudo,你的菜单有一个小问题,

map --mem /.... (11) || pause Error occured while loading

这样的话,失败的时候,不知道 error number 的号码是多少。最好能够输出 error number,这样就知道为何失败了。
回复

使用道具 举报

1338#
发表于 2012-5-11 11:20:49 | 只看该作者
原帖由 chenmaochun 于 2012-5-11 11:00 发表
让人意外的结果产生了,用了p 大最后上传的 grldr后,测试不下20次,没有一次卡住,测试结果如下图:
142754


你辛苦了。

前面 pseudo 还希望测试 1330 楼的 grldr。

pseudo 能够给目前这种情况一个解释吗?
回复

使用道具 举报

1339#
 楼主| 发表于 2012-5-11 11:34:54 | 只看该作者

回复 #1339 chenmaochun 的帖子

请chenmaochun再试这个

grldr2.rar

132.57 KB, 下载次数: 28, 下载积分: 无忧币 -2

回复

使用道具 举报

1340#
 楼主| 发表于 2012-5-11 11:48:00 | 只看该作者
回复 #1341 不点 的帖子、回复 #1342 不点 的帖子
我理解#1339楼的反馈是对#1336楼的反馈;
#1332楼是对#1330楼的反馈。

map --mem /.... (11) || pause Error occured while loading
不在乎失败、失败代码,在于陷进去卡死无反馈。

不过我有个疏忽,就是没有去掉之后的
CPYFILES.BAT行,如果前面过了但卡在这行就冤枉g4d了。
去掉CPYFILES.BAT行的最简菜单并不卡。

#1343楼去掉CPYFILES.BAT 行,看看结果。
回复

使用道具 举报

1341#
发表于 2012-5-11 11:58:43 | 只看该作者
用1343楼的grldr测试了10次,不卡,图片如下:
回复

使用道具 举报

1342#
 楼主| 发表于 2012-5-11 12:11:43 | 只看该作者
不好意思,弄了半天,问题看来出在CPYFILES.BAT这行。
先前的现象都可以解释了。
回复

使用道具 举报

1343#
发表于 2012-5-11 12:18:38 | 只看该作者
但是随机卡死的现象,仍然无法解释。

我怀疑是 malloc 函数互相打架引起的。

lzma 使用了 malloc 函数,set 等一系列命令都使用了 malloc 函数。早先我提醒过 chenall 尽量在内核中避免使用 malloc 函数,但是仍然有很多内部命令代码在用 malloc 函数。

malloc 函数分配一定量的空间,供 lzma 和 set 等命令使用。当这些低端空间正好也被用户使用的时候,那就要发生冲突了,而且冲突的表现将是随机的,既可能导致死机,也可能导致各类五花八门的错误。

malloc 函数分配的内存,应该位于 32M 以上,很容易与用户的 IMG 以及其他数据发生冲突。

内部命令以及内核代码不应该使用 malloc 函数,取而代之,应该使用内核保留区 32M 空间中还未被使用的固定内存。

这样一来,lzma 以及 set 等一系列命令,才真正可靠。

我想,问题的根源大致就是这样的。至少这是一种能够自圆其说的解释,否则,很难解释那些随机的失败现象。
回复

使用道具 举报

1344#
发表于 2012-5-11 13:13:00 | 只看该作者
在测试中我发现,似乎第一次启动时,成功率较高。
回复

使用道具 举报

1345#
 楼主| 发表于 2012-5-11 14:09:50 | 只看该作者
CPYFILES.BAT代码:
  1. !BAT
  2. setlocal
  3. set src=%1
  4. set dst=%2
  5. ls %src% | call :loop
  6. endlocal
  7. exit
  8. :loop
  9. shift
  10. if "%0"=="" exit
  11. if /i not "%0"=="FAT" (hd-1,0)/BIN/FAT copy /o %src%%%0 %dst%%%0 > nul || echo -n
  12. goto :loop
复制代码

看不出会卡死的地方。

疑点是ls %src%结果包含目录名drivers,后面fat copy复制时,执行的是
(hd-1,0)/BIN/FAT copy /o (11)/wxpe/system32/drivers (hd-1,0)/wxpe/system32/drivers
这个本来无论成败逻辑上都无问题,都不会卡。

但是,有的机器在复制对象不是文件而是目录时,就有一定的概率卡死。
印象中,以前不点、chenall遇到过访问pxe服务器端文件menu.lst,当menu.lst不是文件而是目录时,有可能会死掉。
这个相似性似乎可以解释得通。

等会我传个测试文件,把复制目录名情形避过,看看是不是好了。
回复

使用道具 举报

1346#
发表于 2012-5-11 14:22:34 | 只看该作者
FAT 外部命令有可能造成问题。

当 FAT 的源代码中未把所有的全局变量都加上 static 限定时,就可能导致使用 128M 处附近作为变量的地址,这样会破坏掉内存盘之类的。
回复

使用道具 举报

1347#
 楼主| 发表于 2012-5-11 14:54:36 | 只看该作者
@chenmaochun2010XwX
换附件两个文件,但愿不再卡了。

主要变动是避开fat复制目录名。

@不点
fat是有出问题的时候,包括复制文件有时实际已复制成功,却返回失败。
但fat在内存方面的问题,经验上感觉还不到卡住的地步。
看这回测试结果了。

test.part1.rar

400 KB, 下载次数: 49, 下载积分: 无忧币 -2

test.part2.rar

390.26 KB, 下载次数: 56, 下载积分: 无忧币 -2

回复

使用道具 举报

1348#
发表于 2012-5-11 15:24:32 | 只看该作者

回复 #1351 pseudo 的帖子

现在问题终于得到完美解决,测试了10次,不论按不按回车都不会卡住了,另外想请教p大一个问题,0pe和其他pe做合盘的时,使用菜单调用0pe的情况下,configfile /BOOT/GRUB/MENU.0PE,MENU.0PE里面的菜单还需要修改不?
回复

使用道具 举报

1349#
 楼主| 发表于 2012-5-11 16:20:04 | 只看该作者

回复 #1352 chenmaochun 的帖子

谢谢你们做了大量测试,辛苦了。

总结一下:

原因:
开始弄错方向,以为是对native.lzma进行map时卡死,其实是卡在后来的复制操作。
当外部命令fat复制的不是文件而是目录时,按说无论成败都应返回才合理。
但事实上,在少数机器上(不是每台机器),多次启动中有随机地出现(同一台机不是总出现)卡死的现象。
g4d曾经在试图读pxe服务器端menu.lst文件,恰好menu.lst不是文件而是目录名时遇到过类似卡死现象。

对策:
避开复制目录情形,确保复制对象都是文件。

这个问题藏得较深,一般机器上不会出现,出现的机器也不是总出现,显得诡异。

--------------------------------------------------------------------------------------
补充:
尤其03pe也是完全相同操作,却不见报告有卡的现象,更显诡异。

[ 本帖最后由 pseudo 于 2012-5-11 19:32 编辑 ]
回复

使用道具 举报

1350#
 楼主| 发表于 2012-5-11 16:29:35 | 只看该作者
原帖由 chenmaochun 于 2012-5-11 15:24 发表
现在问题终于得到完美解决,测试了10次,不论按不按回车都不会卡住了,另外想请教p大一个问题,0pe和其他pe做合盘的时,使用菜单调用0pe的情况下,configfile /BOOT/GRUB/MENU.0PE,MENU.0PE里面的菜单还需要修 ...

关键是换0penb.lzma就行了。grldr可用原版的,我这次提供grldr是怕你们换来换去找不着原版的了。

menu.0pe就是grldr内置菜单的复制品。
如果你的grldr不内置0pe专用菜单,而是内置自己的菜单,那么可调用menu.0pe来启动0pe。

前面#1322楼提供的dos.gz及文件位置调整仍有效。

后面我会重新上传完整版本。
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-24 12:01

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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