无忧启动论坛

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

反馈一个 grldr.mbr 0.4.6a 的 bug

  [复制链接]
211#
发表于 2013-11-15 14:44:13 | 只看该作者
以前,硬盘软盘分区容易鉴定:硬盘有分区表而软盘没有;软盘有BPB而硬盘没有。现在与时俱进,两者均有可能。
以前,驱动器号=00,就是软盘,有BPB没有分区表;驱动器号=0x80就是硬盘,有分区表没有BPB。现在不一定了。
回复

使用道具 举报

212#
发表于 2013-11-15 14:47:41 | 只看该作者
本帖最后由 不点 于 2013-11-15 14:48 编辑

请 mygamexxx 仔细再看我前面的帖子(部分修改了)。需要 yaya 去强化和完善 fbinst 这个软件。

点评

copy-bpb的选项好像也试验过一次,应该也是不成功,后来就没有测试了。  详情 回复 发表于 2013-11-15 14:53
回复

使用道具 举报

213#
发表于 2013-11-15 14:53:18 | 只看该作者
不点 发表于 2013-11-15 14:47
请 mygamexxx 仔细再看我前面的帖子(部分修改了)。需要 yaya 去强化和完善 fbinst 这个软件。

copy-bpb的选项好像也试验过一次,应该也是不成功,后来就没有测试了。
回复

使用道具 举报

214#
发表于 2013-11-15 14:55:55 | 只看该作者
yaya 说的 “与时俱进”,可能还有些 “很无奈” 的意思在其中吧。混乱中的 BIOS,造就了 grub4dos 的成功。为什么呢?因为混乱的 BIOS 把其他很多软件都打压下去了,只剩下为数不多的寥寥几个软件能够生存下来,其中就有 grub4dos 一个名额。

回复

使用道具 举报

215#
发表于 2013-11-15 14:58:54 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-11-15 15:00 编辑

死机发生地址:
stage2.c,2093      if (grub_open (default_file))

从 disk_i0.c ,1925  grub_open (char *filename) 函数看,似乎没有引起死机的语句。
回复

使用道具 举报

216#
发表于 2013-11-15 15:02:15 | 只看该作者
copy-bpb的选项好像也试验过一次,应该也是不成功,后来就没有测试了。


成功不成功,你都可以再试验一次。尤其是,待到 yaya 或者其他某个人要开始修补 fbinst 的时候,到那时,你更应该去试试。


回复

使用道具 举报

217#
发表于 2013-11-15 15:04:31 | 只看该作者
本帖最后由 不点 于 2013-11-15 15:06 编辑

open file 的时候,要确定 file 的扇区序列。所以,一定有读盘的动作。读取分区表、BPB 信息、FAT 表、根目录信息,等等,都是不可避免的。死机应该很容易发生。
回复

使用道具 举报

218#
发表于 2013-11-15 15:06:06 | 只看该作者
Re mygamexxx :
修改 0X5D 处为 FF,同时修改 0x64 为 80,试一试。

点评

190楼版本,修改0x5D为FF,同时修改0x64为80, 单步调试情况相同。  详情 回复 发表于 2013-11-15 15:51
回复

使用道具 举报

219#
发表于 2013-11-15 15:11:09 | 只看该作者
命令行,菜单都能进入

那根是什么?00?80?
回复

使用道具 举报

220#
发表于 2013-11-15 15:51:12 | 只看该作者
本帖最后由 mygamexxx 于 2013-11-15 16:41 编辑
2011yaya2007777 发表于 2013-11-15 15:06
Re mygamexxx :
修改 0X5D 处为 FF,同时修改 0x64 为 80,试一试。


190楼版本,修改0x5D为FF,同时修改0x64为80, 单步调试情况相同。拨出U盘后,停止于<139 press key (stage2.c,2435)>,不能进入菜单和命令行。

用FBINSTTOOLS格式化,复制第一分区BPB,格式化后,重新启动手机,显示SD卡损坏。取出SD卡,装入读卡器,插入电脑,我的电脑中无U盘。
插回手机,用手机格式化,能识别外置卡,取出,装入读卡器,插入电脑中,出现U盘,用XP格式化。用BOOTICE1.31写入WEE主引导,GRUB4DOS分区引导0.5.4c。装入手机,手机可识别外置卡,进入大容量存储模式,在电脑上用BOOTICE查看分区引导记录,显示为GRUB4DOS,启动明基笔记本,no grldr。修改 0X5D 处为 FF,同时修改 0x64 为 80,启动,还是no grldr。

1.jpg (171.36 KB, 下载次数: 129)

1.jpg
回复

使用道具 举报

221#
发表于 2013-11-15 16:19:11 | 只看该作者
menu.lst 的位置太远?在别的机器上,用 blocklist 命令看看 menu.lst 是不是太远了?超出 bios 能力就死了。

另外,启动时快速按 c 键进入命令行,用

cat --hex (hd0)XXXX+1

的方式来试验,看看最大可访问的扇区号 XXXX 究竟是多大。

回复

使用道具 举报

222#
发表于 2013-11-15 16:44:17 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-11-15 22:49 编辑

请测试。0X5D 处为 00
我说我怎么可以测试成功,原来是这样修改的:
//    j = (dos_part_start ? 0x80 : 0);
      j = boot_drive;

如果只注释第一句,则 j,k 都是随机值。

点评

与199楼相同。  详情 回复 发表于 2013-11-15 16:58
回复

使用道具 举报

223#
发表于 2013-11-15 16:58:22 | 只看该作者
本帖最后由 mygamexxx 于 2013-11-15 17:43 编辑
2011yaya2007777 发表于 2013-11-15 16:44
请测试。0X5D 处为 00
我说我怎么可以测试成功,原来是这样修改的:
//    j = (dos_part_start ? 0x80 : ...


与199楼相同。拨出U盘后,显示内置菜单,但中间有一段文字显示过,按C键进入命令行(需要一定时间),geometry 显示0x80,显示的C/H/S值,与U盘相同966/255/63。但由于拨出了U盘还是什么原因,disk read error.

晚上又是值班,可以长时间测试。同样情况,在联想台式机上,加载USB驱动失败。不加载 USB驱动 ,启动0PE成功,但我的电脑中无U盘。
回复

使用道具 举报

224#
发表于 2013-11-15 20:34:30 | 只看该作者
也许资源管理器不认识没有分区表的 usb 硬盘。要知道,你这个 usb 盘是 0x80,这瞒不过微软,因此,微软就认为它应该有分区表,否则是怪胎。既然是怪胎,那就不予承认。

联想也没招,因为联想的 bios 管不住手机硬件,手机硬件非要隐藏 63 个扇区,对此,联想也毫无办法。所以,结果就是,windows 死活都不会承认这个怪胎。除非有人开发新的驱动来支持这一情况,就像 firadisk 支持了 grub4dos 的虚拟盘那样,也对这种 “怪胎” 予以支持。

归根结底,你还得用 fbinst 的办法(或者其他某个自造的类似于grub4dos的三重 mbr 的办法)来做。当然了,fbinst 本身可能还得稍稍改造一下才行,正如前面解释过的那样。

点评

同样的U盘,只要不从U盘启动PE,WINDOWS就可以认得U盘  详情 回复 发表于 2013-11-15 21:23
回复

使用道具 举报

225#
发表于 2013-11-15 21:23:04 | 只看该作者
本帖最后由 mygamexxx 于 2013-11-15 21:56 编辑
不点 发表于 2013-11-15 20:34
也许资源管理器不认识没有分区表的 usb 硬盘。要知道,你这个 usb 盘是 0x80,这瞒不过微软,因此,微软就认 ...


同样的U盘,只要不从U盘启动PE,WINDOWS就可以认得U盘。我估计在明基笔记本上启动不成功就与U盘的格式参数有关,此BIOS可能对FDD启动盘的格式参数比较较真。
回复

使用道具 举报

226#
发表于 2013-11-15 22:50:33 | 只看该作者
可以试一试这个。

点评

启动成功了,geometry 返回 0x80,顺利进入菜单,顺利启动非NATIVE PE.  详情 回复 发表于 2013-11-15 23:42
回复

使用道具 举报

227#
发表于 2013-11-15 23:15:32 | 只看该作者
本帖最后由 不点 于 2013-11-15 23:22 编辑
同样的U盘,只要不从U盘启动PE,WINDOWS就可以认得U盘。我估计在明基笔记本上启动不成功就与U盘的格式参数有关,此BIOS可能对FDD启动盘的格式参数比较较真。


不从 U 盘启动,那么本地硬盘是 hd0,因而 U盘就不占据 “系统盘” 的位置,它不是 C: 盘,那么,驱动程序可能对此 U 盘比较 “宽容”,允许它是不含分区表的软盘格式。Windows 或许 “不能容忍” 它的系统盘(同时又是硬盘的) C: 盘是不含分区表的。要知道,Windows 需要在系统盘上寻找很多配置文件,所以,它可能不允许 (hd0) 是不含分区表的。大家可以做个试验,在虚拟机中弄出个不含分区表的 (hd0) 来,看看启动 PE 后,Windows 能否承认这个 (hd0) 上的 FAT32 系统?我猜是不会承认的。既然不承认 (hd0) 这个 U 盘,那么 Windows 会继续找到 (hd1) 这个 “第二硬盘”(其实是本地硬盘),并赋予它 “系统盘” 的地位,让它拥有 C: 盘。

虽然这充其量也只是一种猜测,但这种猜测似乎也是可以 “自圆其说” 的,即,在逻辑上有这样的可能性,不能排除掉这样的可能性。

甚至还有一种可能性:不仅不允许 (hd0) 不含分区表,其他任何一个 (hdN) 也都是不允许的,只有 (fd0) 和 (fd1) 才是允许不含分区表的。大家可以通过虚拟机上的试验来检验这些猜测。

回复

使用道具 举报

228#
发表于 2013-11-15 23:42:57 | 只看该作者
本帖最后由 mygamexxx 于 2013-11-15 23:53 编辑
2011yaya2007777 发表于 2013-11-15 22:50
可以试一试这个。


启动成功了,geometry 返回 0x80,顺利进入菜单,顺利启动非NATIVE PE。0PE按空格和按回车均停止在NATIVE界面, NATIVE PE均停止在NATIVE界面。

03PE/8PE等非NATIVE PE, 均成功启动,03PE我的电脑中看不到U盘,8PE我的电脑中能看到U盘。可能是03PE和0PE没有FDD磁盘的驱动?
回复

使用道具 举报

229#
发表于 2013-11-16 06:07:58 | 只看该作者
220 楼的图片:

这次你的 0x40 处为软盘 00,这可能诱导主板 bios 将这个 usb 盘当作软盘来处理。所以,你在 0x64 处强制启动盘为 80,就成为错误的了。0x40 处仍然在 BPB 范围内,而 0x59 处已经不是微软的 BPB 规范了,而是 grub4dos 自己的扩展规范。bios 不会承认 grub4dos 的扩展规范的,所以,0x64 处究竟是什么值,bios 不予理睬。bios 可能会参考 0x40 处的盘号来决定 usb 的盘号。你的情况应该就是这样的。对于别的电脑,那就不一定了,别的 bios 可能连 0x40 处也不予理睬,直接按照 bios 的意图来决定启动盘的盘号。

回复

使用道具 举报

230#
发表于 2013-11-16 07:11:57 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-11-16 07:17 编辑
至于说 0.4.5c 也显示 begin pxe scan... ,我觉得这是 bug。

这是不点自己以前打的补丁,还特别嘱咐也要打在 0.4.6a 。注释掉 1 行:
    //orb        $0x01, (pre_stage2_start - _start1 + 5) /* disable pxe */
不知这样是否从硬盘(或光盘)启动后,也可以看到网盘(如果有的话)内容?
修改与否,请不点斟酌。
回复

使用道具 举报

231#
发表于 2013-11-16 07:22:53 | 只看该作者
启动成功了,geometry 返回 0x80,顺利进入菜单,顺利启动非NATIVE PE。

之所以成功, 一是因为以 0x80 启动,故清零了 0x410 处的软盘数;二是修改了查找代码,使得它从当前驱动器查找时,也可以查找没有分区表的硬盘。
回复

使用道具 举报

232#
发表于 2013-11-16 07:24:47 | 只看该作者
yaya,我现在想不起来当时为何要这么做。你能否再花费一些时间搞明白当初的背景?是为了解决什么问题而这么做的?

回复

使用道具 举报

233#
发表于 2013-11-16 14:05:45 | 只看该作者
为了测试前面的帖子里提到的启动老机器时加载USB2.0驱动不成功(把摄像头取下才能成功)的问题在测试包解决没有。经测试,还是要将摄像头取下才能加载成功,但是又有一个新情况了,就是当加载USB2.0驱动失败后,0PE在等待几秒的那个菜单后,就进入如附图的那个画面,而且一直不停地在跳。如果把摄像头取下来,USB2.0驱动加载成功就一切OK。虽然此帖不是为了解决加载USB2.0驱动的问题,但不知我提供这个情况对解决问题有没有帮助。

IMG_20131116_135310796.jpg (716.82 KB, 下载次数: 117)

IMG_20131116_135310796.jpg

点评

加载usb驱动后,显示:“0123Loaded failed” 的情况,请测试。把012后面的数字贴上来。  详情 回复 发表于 2013-11-18 10:50
回复

使用道具 举报

234#
发表于 2013-11-16 16:14:02 | 只看该作者
启动成功了,geometry 返回 0x80,顺利进入菜单,顺利启动非NATIVE PE。0PE按空格和按回车均停止在NATIVE界面, NATIVE PE均停止在NATIVE界面。

03PE/8PE等非NATIVE PE, 均成功启动,03PE我的电脑中看不到U盘,8PE我的电脑中能看到U盘。可能是03PE和0PE没有FDD磁盘的驱动?


我猜,所谓的 native PE 就是使用硬盘已安装 Windows 文件的那种 PE。这样的 PE 由于 (hd0) 不含分区表而成为非法的,所以就不能启动。请看前面我对于 “不含分区表的 (hdN) 被 Windows 拒绝” 的猜测。

也就是说,问题可能是无解的,除非接下来用 fbinst 之类的技术,把硬盘做成 “软硬兼施” 的双重格式。

我觉得你可以休息了,静等有人改造和完善 fbinst。

回复

使用道具 举报

235#
发表于 2013-11-17 21:36:30 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-11-17 21:43 编辑
把摄像头取下才能成功

目前无解。

当加载USB2.0驱动失败后,0PE没有办法与U盘通信,故进入死循环。
回复

使用道具 举报

236#
发表于 2013-11-17 21:39:59 | 只看该作者
本帖最后由 2011yaya2007777 于 2013-11-18 15:11 编辑

测试目的: NATIVE PE 可否顺利启动,是不是因为引导驱动器没有分区表。

点评

我的手机U盘用BOOTICE重新格式化了,236楼的grldr, 启动后,加载USB驱动成功, 进入命令行, geometry 返回的是0x00(LBA),C/H/S=967/255/63。geometry (hd0),返回磁盘不存在。但硬盘是hd1,由于hd0不存在但占用了h  详情 回复 发表于 2013-11-18 12:03
回复

使用道具 举报

237#
发表于 2013-11-18 10:50:07 | 只看该作者
本帖最后由 2011yaya2007777 于 2014-1-3 21:55 编辑
2010RENDQ 发表于 2013-11-16 14:05
为了测试前面的帖子里提到的启动老机器时加载USB2.0驱动不成功(把摄像头取下才能成功)的问题在测试包解决 ...


加载usb驱动后,显示:“0123Loaded failed” 的情况,请测试。把012后面的数字贴上来。

点评

我的联想台式机使用237楼的GRLDR , 显示如下: 012 0014 1803 1005 A0040 0019 0001 0009 0000 0048 1000 1000_  详情 回复 发表于 2013-11-18 12:17
回复

使用道具 举报

238#
发表于 2013-11-18 11:57:46 | 只看该作者
呵呵,我这个显示器不显示前面的一列,前面一列好像都是“0”

IMG_20131118_114848384.jpg (593.94 KB, 下载次数: 124)

IMG_20131118_114848384.jpg

点评

238楼情况: 插入摄像头后,U盘插口没有返回自己的信息,却返回摄像头信息。比较0048和0050端口信息就可知道。这是主板usb主控的问题。只能拔掉摄像头,或者把U盘插入其他插口试一试。  详情 回复 发表于 2013-11-19 11:44
回复

使用道具 举报

239#
发表于 2013-11-18 12:03:26 | 只看该作者
本帖最后由 mygamexxx 于 2013-11-18 13:50 编辑
2011yaya2007777 发表于 2013-11-17 21:39
测试目的: NATIVE PE 可否顺利启动,是不是因为引导驱动器没有分区表。


我的手机U盘用BOOTICE重新格式化了,236楼的grldr, 启动后,加载USB驱动成功, 进入命令行, geometry 返回的是0x00(LBA),C/H/S=967/255/63。geometry (hd0),返回磁盘不存在。但硬盘是hd1,由于hd0不存在但占用了hd0,启动0PE时出错。启动NATIVE 的XPPE成功,不再停留在NATIVE界面。但我的电脑上还是无法看到U盘。

如果去掉产生的hd0,应该就能完美了。
回复

使用道具 举报

240#
发表于 2013-11-18 12:17:26 | 只看该作者
2011yaya2007777 发表于 2013-11-18 10:50
加载usb驱动后,显示:“0123Loaded failed” 的情况,请测试。把012后面的数字贴上来。

我的联想台式机使用237楼的GRLDR , 显示如下:

012
0014 1803 1005 A0040 0019 0001 0009 0000
0048 1000 1000_
回复

使用道具 举报

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

本版积分规则

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

闽公网安备 35020302032614号

GMT+8, 2024-4-28 15:53

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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