无忧启动论坛

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

[求助] 进行磁盘交换后直接map时会在chainloader 时出现读磁盘错误,求解。

[复制链接]
31#
发表于 2011-10-26 20:38:53 | 只看该作者
@hotdll:
抽空找了个电脑,实机测试了一下zip盘启动后处理的情况。

  1. !BAT
  2. (hd0,0)/fd2hd.cmd
  3. map (ud)/boot/imgs/ntboot.iso (0xff)
  4. map --hook
  5. chainloader (0xff)
  6. boot
复制代码
或者

  1. !BAT
  2. map (fd0) (hd0)
  3. map (hd0) (hd1)
  4. map --hook
  5. calc *0x82b9=*0x82b9&0xffffff00|0x80
  6. map (ud)/boot/imgs/ntboot.iso (0xff)
  7. map --hook
  8. chainloader (0xff)
  9. boot
复制代码
一切正常,没有你所说的情况。
回复

使用道具 举报

32#
发表于 2011-10-26 20:55:38 | 只看该作者

回复 #31 zxw 的帖子

怀疑hotdll的不是USB-ZIP模式,可能是USB-FDD模式(纯粹猜测)才会出错
回复

使用道具 举报

33#
 楼主| 发表于 2011-10-26 21:02:57 | 只看该作者

回复 #31 zxw 的帖子

您测试忽略了最关键的一句让问题重现的代码:

您应该这样测试:

  1. !BAT
  2. (hd0,0)/fd2hd.cmd
  3. map --mem (hd0,0)/wvblock.gz (fd0)
  4. map --hook
  5. map (ud)/boot/imgs/ntboot.iso (0xff)
  6. map --hook
  7. chainloader (0xff)
  8. boot
复制代码


或者


  1. !BAT
  2. map (fd0) (hd0)
  3. map (hd0) (hd1)
  4. map --hook
  5. map --mem (hd0,0)/wvblock.gz (fd0)
  6. map --hook
  7. calc *0x82b9=*0x82b9&0xffffff00|0x80
  8. map (ud)/boot/imgs/ntboot.iso (0xff)
  9. map --hook
  10. chainloader (0xff)
  11. boot
复制代码

[ 本帖最后由 hotdll 于 2011-10-26 21:16 编辑 ]
回复

使用道具 举报

34#
发表于 2011-10-26 21:32:02 | 只看该作者

回复 #33 hotdll 的帖子

代码里面重复的“map --hook”,不对吧
回复

使用道具 举报

35#
发表于 2011-10-26 22:03:55 | 只看该作者

回复 #33 hotdll 的帖子

wvblock.gz 在原来的可见区(fd0,0)么?
回复

使用道具 举报

36#
发表于 2011-10-27 01:21:56 | 只看该作者
fbinst的部分代码:
#define CODE_START 0x2000
……
setup_mbr:
pushw %ds
popw %es
movw $8, %cx
movw $(CODE_START + 0x1be), %si
movw $(0x800 - 18), %di
pushw %di
rep movsw
popw %si
movw orig_es, %es
movw orig_di, %di
xorb %dh, %dh
movb %dl, ABS(bootdrv)
ret
-----------------------------------------
#define OFS_max_sec 0x1ad
#define OFS_lba 0x1ae
#define OFS_bootdrv 0x1af
#define OFS_spt 0x1b0
#define OFS_heads 0x1b1
#define OFS_boot_base 0x1b2
#define OFS_fb_magic 0x1b4
-------------------------------------------

对比下ud为hd0和ud为fd0不同情况下 grub4dos下的两个数值:

1、ud 为 hd0,对比0x24和0x1af 两处的值:

cat --hex (md)0x10+1
cat --hex (hd0)+1

2、ud 为 fd0,对比0x24和0x1af 两处的值:

cat --hex (md)0x10+1
cat --hex (fd0)+1

不是很懂汇编,我是瞎鼓捣乱猜测,也许有点用。

[ 本帖最后由 Plantsoot 于 2011-10-27 01:25 编辑 ]
回复

使用道具 举报

37#
发表于 2011-10-27 03:43:41 | 只看该作者
原帖由 hotdll 于 2011-10-26 14:26 发表

不是旧主板死灰复燃,而是技嘉的板子基本上都会识别小于8G的U盘为USB-ZIP

因为技嘉用的bios是award


我用过的07年之后的技嘉的780 760 740 880的amd主板,都是把u盘识别为usb hdd,f12的时候可以直接在usb hdd或者hard disk栏目里选择
回复

使用道具 举报

38#
发表于 2011-10-27 07:36:05 | 只看该作者

回复 #37 yueyezhan 的帖子

没错,所以不存在技嘉主板的AWARD BIOS把U盘识别为USB-ZIP之说,而且从G41年代开始,U启速度已经达到了2.0的速度
回复

使用道具 举报

39#
 楼主| 发表于 2011-10-27 08:49:32 | 只看该作者

回复 #36 Plantsoot 的帖子

上传本机u盘被识别为fd0的机器的两个值
cat --hex (md)0x10+1
cat --hex (hd0)+1
cat.7z (3.43 KB, 下载次数: 26)

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

使用道具 举报

40#
 楼主| 发表于 2011-10-27 08:52:36 | 只看该作者

回复 #34 rockrock99 的帖子

谁规定map --hook不可以重复执行的?
我调用别人的批处理,别人map --hook
我现在需要创建新的虚拟驱动器,我就不能map --hook?
回复

使用道具 举报

41#
 楼主| 发表于 2011-10-27 08:54:27 | 只看该作者
原帖由 rockrock99 于 2011-10-27 07:36 发表
没错,所以不存在技嘉主板的AWARD BIOS把U盘识别为USB-ZIP之说,而且从G41年代开始,U启速度已经达到了2.0的速度

你没遇到不代表没有这种情况。
fbinst的反馈贴您自己去翻翻。
这个帖子是寻求帮助的,不是让您否定有usb-hdd被识别为usb-zip这类情况的。
说话有点重,望海涵。
回复

使用道具 举报

42#
 楼主| 发表于 2011-10-27 08:55:13 | 只看该作者
原帖由 zxw 于 2011-10-26 22:03 发表
wvblock.gz 在原来的可见区(fd0,0)么?

是的,在原来的(fd0,0)可见区。即U盘可见区。
回复

使用道具 举报

43#
 楼主| 发表于 2011-10-27 08:56:22 | 只看该作者
原帖由 yueyezhan 于 2011-10-27 03:43 发表


我用过的07年之后的技嘉的780 760 740 880的amd主板,都是把u盘识别为usb hdd,f12的时候可以直接在usb hdd或者hard disk栏目里选择

F12的时候都有usb-hdd
但是并非是一定都会识别为usb-hdd。
毕竟您用用的主板不会超过三位数。
回复

使用道具 举报

44#
发表于 2011-10-27 09:03:23 | 只看该作者

回复 #33 hotdll 的帖子

失败之后做如下检查

先确定fb_status的值是否正确read 0x82b8
得到的第二个字节值要等于新的ud设备(比如0x80或0x81)

使用cat命令检测UD上的文件是否可以正常访问
cat --hex (ud)/grldr

对比一下(ud)和(hd0)中的文件读出来的是否一样,例子
cmp (ud)/grldr (hd0)/grldr

如果以上测试完全通过的话,没有理由不行的。
回复

使用道具 举报

45#
 楼主| 发表于 2011-10-27 09:10:37 | 只看该作者

回复 #44 chenall 的帖子

>>>先确定fb_status的值是否正确read 0x82b8
答:确定,zxw帮助测试的,这里不会错。

>>>使用cat命令检测UD上的文件是否可以正常访问
cat --hex (ud)/grldr
答:刚测试过,可以cat 我按了足足2分钟,终于显示器完。

对比一下(ud)和(hd0)中的文件读出来的是否一样,例子
cmp (ud)/grldr (hd0)/grldr

答:没有差别。

备注:
您可能没看清楚,fd0 换到 hd0后,处理过82b9 82b8的设备号,这个时候map和map --mem命令都正常。然后创建新的虚拟驱动器并映射设备号为fd0
这个时候(ud)内的文件使用map 命令会出现error 25: Disk read error,但是这个时候使用map --mem命令,则完全正常。


我怀疑是不是ud的缓存作怪?fd0换到hd0设备号后,处理了fb的值,但是ud的缓存没变。当map的时候读取的是缓存,缓存指向的是fd0,fd0被赋予新虚拟软驱的设备号后,map 指令应该还是去ud缓存指向的地址去查找,肯定出错。map --mem是不是会忽略ud的缓存或者是刷新ud的缓存?

[ 本帖最后由 hotdll 于 2011-10-27 09:26 编辑 ]
回复

使用道具 举报

46#
发表于 2011-10-27 09:32:35 | 只看该作者

回复 #45 hotdll 的帖子

缓存只是缓存文件列表资料。关键的的数据还是从ud设备中读取的,其中最关键的还是fb_status的值

如果这个值错了,那肯定会读错。

看看map --status的状态就明白了.

另外其实你可以先
map (ud)/xxxx (0xfa)的而不必等到交换了再去执行这一句。
回复

使用道具 举报

47#
发表于 2011-10-27 09:48:25 | 只看该作者
在zip机上测试,如果改成下面这样,成功。红色部分不能有。否则失败。
!BAT
map (fd0) (hd0)
map (hd0) (hd1)
map --hook
calc *0x82b9=*0x82b9&0xffffff00|0x80
map --mem (hd0)/wvblock.gz (fd0) 注(UD) 如果是可见区是(hd0,0)
map --hook

map (ud)/boot/imgs/ntboot.iso (0xff)
map --hook
chainloader (0xff)
boot
回复

使用道具 举报

48#
发表于 2011-10-27 09:59:02 | 只看该作者
原帖由 hotdll 于 2011-10-27 08:49 发表
上传本机u盘被识别为fd0的机器的两个值
cat --hex (md)0x10+1
cat --hex (hd0)+1
131207


识别为fd0,你cat的是hd0,不需要所有数据,记录三个关键数据就可以了。

2、ud 为 fd0,对比0x24、0x26、0x1af 三处的值:

cat --hex (md)0x10+1
cat --hex (fd0)+1
回复

使用道具 举报

49#
 楼主| 发表于 2011-10-27 10:31:35 | 只看该作者
原帖由 Plantsoot 于 2011-10-27 09:59 发表


识别为fd0,你cat的是hd0,不需要所有数据,记录三个关键数据就可以了。

2、ud 为 fd0,对比0x24、0x26、0x1af 三处的值:

cat --hex (md)0x10+1
cat --hex (fd0)+1


晕。我中午回去测试。
回复

使用道具 举报

50#
 楼主| 发表于 2011-10-27 10:34:57 | 只看该作者
原帖由 chenall 于 2011-10-27 09:32 发表
缓存只是缓存文件列表资料。关键的的数据还是从ud设备中读取的,其中最关键的还是fb_status的值

如果这个值错了,那肯定会读错。

看看map --status的状态就明白了.

另外其实你可以先
map (ud)/xxxx ( ...

刚才忘记输入这个命令了。
中午回去测试后拍照上传。
然后再请C打指点。

>>>其实可以在交换前map。。。。。。。。。。
答:之所以这么做主要还是不想限制用户的写菜单方式。
其实我个人觉得这个问题由g4d开发人员处理更好,只要读取到FBBF标志就识别为存在FB,不管BIOS是否认为是FD0,都将设备号设定为hd0

这样zip问题就不存在了。
回复

使用道具 举报

51#
发表于 2011-10-27 10:53:15 | 只看该作者
原帖由 hotdll 于 2011-10-27 08:56 发表

F12的时候都有usb-hdd
但是并非是一定都会识别为usb-hdd。
毕竟您用用的主板不会超过三位数。


技嘉的amd主板,除了890系列,我几乎都用过,我认为某一种型号的主板我用过一块的话就可以了,因为同一型号的产品的bios是一样的,这个是由产品性质来决定的,大概技嘉的amd主板的型号也不超过三位数吧
回复

使用道具 举报

52#
 楼主| 发表于 2011-10-27 11:43:57 | 只看该作者

回复 #51 yueyezhan 的帖子

请提供每款您用过的技嘉主板usb-hdd启动后的read 0x82b8的值.
谢谢。
技嘉nf550,技嘉kt890,这两个主板我测试的100% USB-HDD启动识别为fd0
回复

使用道具 举报

53#
发表于 2011-10-27 12:56:32 | 只看该作者

回复 #52 hotdll 的帖子

技嘉nf550,技嘉kt890都是已经很老的主板了,暂时手头上没有,没办法验证

何必去提三位数主板的问题,我之前在电脑城工作,接触三位数的主板比较多,但也不缺乏四位的,你这样说有点看不起人。

发贴只为了提供多些信息而已,莫见怪!
回复

使用道具 举报

54#
 楼主| 发表于 2011-10-27 14:00:42 | 只看该作者

回复 #53 rockrock99 的帖子

这个帖子是为了解决ZIP问题的,
你们遇不到不代表别人遇不到。何况PE或者是启动主要是用来维护系统用的。
现在维护机器是老机器多还是刚买回家用不到三天的机器多?

如果大家的帖子是出于解决问题的,我欢迎,如果不是,建议另开贴。。。。

希望不要跑题。NF550可以支持AM3 X965的CPU,很老吗?这主板的性能并不比amd 870差。难道换个马甲我们就必须换?

电脑是拿来用的,不是拿来换的。否则搞什么无忧启动?直接给论坛的朋友说,有问题扔了换个电脑。
回复

使用道具 举报

55#
 楼主| 发表于 2011-10-27 14:03:10 | 只看该作者
原帖由 chenall 于 2011-10-27 09:32 发表
缓存只是缓存文件列表资料。关键的的数据还是从ud设备中读取的,其中最关键的还是fb_status的值

如果这个值错了,那肯定会读错。

看看map --status的状态就明白了.

另外其实你可以先
map (ud)/xxxx ( ...

执行FD2HD后的
map --status 的结果
回复

使用道具 举报

56#
 楼主| 发表于 2011-10-27 14:05:02 | 只看该作者
原帖由 Plantsoot 于 2011-10-27 09:59 发表


识别为fd0,你cat的是hd0,不需要所有数据,记录三个关键数据就可以了。

2、ud 为 fd0,对比0x24、0x26、0x1af 三处的值:

cat --hex (md)0x10+1
cat --hex (fd0)+1

我更新了cat.7z文件。
或者是下载这个也可以
cat.7z (3.43 KB, 下载次数: 20)
回复

使用道具 举报

57#
发表于 2011-10-27 14:22:41 | 只看该作者

回复 #55 hotdll 的帖子

要出现失败的情况。。

这个是没有什么问题的。关键是出错后的状态。
回复

使用道具 举报

58#
发表于 2011-10-27 15:31:19 | 只看该作者
原帖由 hotdll 于 2011-10-27 10:34 发表

刚才忘记输入这个命令了。
中午回去测试后拍照上传。
然后再请C打指点。

>>>其实可以在交换前map。。。。。。。。。。
答:之所以这么做主要还是不想限制用户的写菜单方式。
其实我个人觉得这个问题由 ...

實為不可能,因為G4D正是用BIOS給出的盤號(FD0=0x00,HD0=0x80)來存取磁區,並不是你要它是什麼就變什麼的東西。
回复

使用道具 举报

59#
 楼主| 发表于 2011-10-27 15:58:08 | 只看该作者

回复 #58 2010roytam1 的帖子

但是我们现在移动fd0到hd0成功了90%
移动hd0到hd1 100%成功。
回复

使用道具 举报

60#
发表于 2011-10-27 16:09:49 | 只看该作者

回复 #59 hotdll 的帖子

这个是两回事。
这个移动使用的是GRUB4DOS的MAP功能。

暂时不用再纠结于这个问题上了,我测试了一下,初步怀疑是GRUB4DOS的BUG。

具体的需要等不点来看一下,相信过几天就会有结果。

关于BUG的描述。
例子:

以下是正常的
map (fd0) (hd0)
map --hook
map (hd0)/xxx.img (yy)
##关键的问题来了,到执行这一步时还是正常的
map --mem (md)+2880 (fd0)
map --hook
##以下开始出现问题了
map (hd0)/xxx.img (zz)

如果新映射的(fd0)和之前的(fd0)的H/S值一样那就没有问题,可以正常使用新的(zz)
如果不一样则新的(zz)将无法正常访问。yy可以正常访问

原因是MAP命令在map的处理时可能有bug。映射时使用的H/S不是旧的(fd0)的值,而是新的(fd0)的值,所以才导致这个问题。

等不点再下结论了,,,又揪出一个BUG。


floppies_orig=1, harddrives_orig=2, floppies_curr=1, harddrives_curr=2

Number of ATAPI CD-ROMs: 0

ram_drive=0x7F, rd_base=0x0, rd_size=0x100000000

Fr To Hm Sm To_C _H _S   Start_Sector     Sector_Count   DHR
-- -- -- -- ---- -- -- ---------------- ---------------- ---
80 00 00 01 004F 01 52 0000000000000000 0000000000000000 F=S
F1 00 FE 3F 234C 3F 7F 000000000001D29C 000000000003FDE0 F=S
F2 00 FE 3F A04F 01 52 000000000001D29C 000000000003FDE0 F=S
00 FF 01 12 8A6C FE 7F 00000000006789F8 0000000000000B40 M=S
F3 FF FE 3F A26C FE 7F 0000000000638C18 000000000003FDE0 M=S

F1是正常的
F2是失败的

F2的TO_C _H _S数据不一样。

F3是加载到内存中的。

[ 本帖最后由 chenall 于 2011-10-27 16:16 编辑 ]
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-11-17 06:51

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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