中国DOS联盟论坛

中国DOS联盟

-- 联合DOS 推动DOS 发展DOS --

联盟域名:www.cn-dos.net  论坛域名:www.cn-dos.net/forum
DOS,代表着自由开放与发展,我们努力起来,学习FreeDOS和Linux的自由开放与GNU精神,共同创造和发展美好的自由与GNU GPL世界吧!

游客:  注册 | 登录 | 命令行 | 会员 | 搜索 | 上传 | 帮助 »
中国DOS联盟论坛 » GRUB4DOS、SYSLINUX及其它启动管理软件讨论专区 » 重大喜讯发布!不点攻克grub不能在某些U盘上使用的难关!
« [1] [2] »
作者:
标题: 重大喜讯发布!不点攻克grub不能在某些U盘上使用的难关! 上一主题 | 下一主题
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『楼 主』:  重大喜讯发布!不点攻克grub不能在某些U盘上使用的难关!

在多个论坛上,总可以见到这样的贴子,即grub无法在一些U盘(USB_ZIP)上顺畅地使用,它是 BIOS 遗留的问题。现在这个难关终于被不点攻克了!
可在
http://grub4dos.jot.com/
下载最新版,以作进一步的测试。

2006-7-25 22:33
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Wengier
系统支持

“新DOS时代”站长


积分 27734
发帖 10521
注册 2002-10-9
状态 离线
『第 2 楼』:  

有没有关于这个问题的更详细信息?



Wengier - 新DOS时代

欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件和资料,地址:
http://wendos.mycool.net/

E-Mail & MSN: wengierwu AT hotmail.com (最近比较忙,有事请联系DOSroot和雨露,谢谢!)

2006-7-25 23:15
查看资料  发送邮件  访问主页  发短消息 网志  OICQ (29206679)  编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 3 楼』:  

我使用的是USB_ZIP的U盘,虽然在DOS下可以启动使用,但如果运行U盘上的grub存在以下两个主要问题(被攻克之前):
1.运行grub.exe时只能读取硬盘上的menu.lst,不能读取U盘上的menu.lst,而且会死机。这样就大大限制了grub在U盘上使用的能力,使grub的强大威力得不到充分的发挥;
2.无论采取什么方式,grub均无法启动U盘上的img文件,这也削弱了grub的强大功能。

有关grub不能在部分U盘上顺畅使用的问题,始终是论坛上的一个讨论热点。长期以来,我们一直以为,这是主板或BIOS固有的问题,是无法克服的,但经过不点这两天来的潜心研究和艰苦奋战,终于使这一问题得到园满的解决,这是grub_for_dos在其发展史上一个阶段性的重大成果!

为使这一问题的解决具有普遍性的意义,需要更多的grub_for_dos使用者参与测试。

2006-7-26 05:49
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 4 楼』:  

我想说,是大家一起努力的结果,尤其是neiljoy的测试非常耐心细致,另一方面我们两个的配合也比较默契。

这个机器的 BIOS 很明显有 BUG,它的 int13/ah=8h 标称 C/H/S=80/2/18,但按照这个 CHS 规格,它却不能访问柱面号C > 7 的任何扇区,一旦访问就死机。这在 DOS 下也是这样。虽然它的 int13/ah=8h返回BL=10h指示应该用int13/ah=48h来确定真正的 CHS 值,但是,这个 BIOS 厂家并未严格遵守业界事实工业标准,没有严格遵从微软的以下规范:

http://www.microsoft.com/whdc/archive/PhantomDrv.mspx

为了方便,我把这个规范复制到这里来:

Eliminating Phantom Floppy Disk Drives under Windows 95/98/Me
Updated: December 4, 2001
*

This article is for system manufacturers who build systems for Microsoft® Windows® Millennium Edition (Windows Me) and for Windows 95/98/Me.

Systems that do not include a floppy disk drive or controller can have a "phantom" floppy drive A listed in miscellaneous user interfaces in Windows.

This article clarifies:
•       

How to eliminate phantom floppy drives from appearing in miscellaneous user interfaces such as My Computer.
•       

How to get devices mapped as drive A other than an industry-standard legacy FDC-based 1.44-MB, 3.5-inch floppy disk drive.

Windows 95/98/Me will show floppy disk drives in miscellaneous user interfaces based on how BIOS support for Int 11 and Int 13 has been implemented. Use the information described in this article to implement your BIOS and verify there are no longer any phantom disk drives. This will result in preventing phantom (non-existent) drives from appearing in most of the Windows 95/98/Me user interfaces (UI).

Note: Not all Windows 95/98/Me user interfaces respond to hot plugging events. For example, if you hot-attach a USB floppy disk drive, My Computer will properly show the added device without a reboot, but there may be other less frequently used user interfaces that do not update until after a reboot.

BIOS Int 11 and Int 13 Implementation Guidelines
Interrupt        Description

Int 11
       

Equipment determination. All subfunctions are required.
If there are devices that appear as floppy drives (for example, El Torito-capable CD-ROM devices), then:
•       

Bit Mask 0x0001 (bit 0) in AL must be set.
•       

Bits 6 and 7 must properly indicate the number of floppy drive devices and devices that appear as floppy devices.

Note: The two count bits are a zero-based count (00b means 1 floppy, 01b means 2 floppies, 10b means 3 floppies, and 11b means 4 floppies).

If there are no devices that appear as floppy drives, then:
•       

Bit mask 0x0001 (bit 0) must be clear.
•       

Bits 6 and 7 must be set to 0.

Int 13
       

High-capacity drive support. All subfunctions required, including AH = 40h-48h.

ROM BIOS must set the head settle, motor start, and format gap values in the disk table pointed to by interrupt vector 1Eh.

Implement the INT 13h AH = 17h call (that is, set the DASD type for format).

Support the change line (INT 13h AH = 15h) on INT 13h floppy drives. Support INT 13h AH = 8 (Get Device Parameters). The INT 13h AH = 8 Get Device Parameters call must not turn on the drive motor for floppy drives.

Implement the extended INT 13h services (AH functions 41h - 48h).

For INT 13h with AH = 48h for installed floppy drives:
•       

If there are no floppy drives attached as INT 13h devices, INT 13h AH = 48h must fail for all floppy drive numbers (drive 0, in particular). However, INT 13h AH = 8 on drive number 0 (DL==0) must work even if there are no INT 13h floppy drives, and it must return a floppy drive count of 0 in the DL register to indicate that no floppy drives are present.
•       

If a floppy drive is an industry-standard 1.44-MB, 3.5-inch drive, the INT 13h AH = 8 call on the device should not modify the BL register.
•       

If the device is something other than an industry standard 1.44-MB, 3.5-inch drive, but is media compatible with the 1.44-MB floppy standard, the INT 13h AH = 8 call on the device should return the parameters for a 1.44-MB industry-standard floppy drive but set the BL register to 10h and return the true maximum-supported capacity drive parameters on the INT 13h AH = 48h call.
•       

For floppy devices that are not media compatible with the 1.44-MB floppy standard, the INT 13h AH = 8 call should return the closest reasonable parameters, set the BL register to 10h, and return the true maximum supported capacity parameters on the INT 13h AH = 48h call. The INT 13h AH = 8 Get Device Parameters call must not turn on the drive motor for floppy drives.
USB 1.44-MB Floppy Disk Drives as Drive A

If you are building a PC that uses a USB 1.44-MB floppy disk drive in place of a legacy FDC-based 1.44-MB floppy drive and you want to map the USB floppy drive to Drive A, it is important that the INT 13h AH = 8 ROM BIOS call (Get Device Parameters) on the device should return with BL= 0x10.

If the floppy drive type returned in the BL register is not 10h, DISKTSD will "pick" a drive letter selecting the first available drive letter.

Call to action for eliminating phantom floppy disk drives
•       

Be certain to map USB 1.44-MB floppy disk drives to drive A as described in this article.

微软在规范中指出,如果设备是与1.44M工业标准软盘兼容的,就应该让 int13/ah=8h 返回C/H/S=80/2/18的几何参数;如果设备不是与1.44M工业标准软盘兼容的,就应该适当地让 int13/ah=8h 返回最接近实际容量的几何参数。这个设备显然不是与1.44M工业标准软盘兼容的,因为按照这个标准去读取扇区会死机(前面说过,即便在DOS下也死机)。因此,它返回 80/2/18 是错误的。它应该返回 C = 7 或 8(后来在 int13/ah=48h中返回的C=96,幸亏当 H 和 S 都正确时,即便参数 C 是错的也不那么容易导致死机),H=255,S=63,这样才接近实际的几何容量。其次,当 BIOS 接到不合适的参数时就死机了,这肯定是 BIOS 的巨大 BUG,毫无疑问了。因此,这就讲清楚了,这个 BIOS 有两个严重的 BUG。

另外,这个 U 盘 BIOS 没能实现 int13/ah=42h 等功能(也就是通常所说的 EBIOS 或者 LBA),也是一个缺陷,因为 EBIOS 已经成了事实工业标准,不支持这个标准,那就是一大损失。不过这不是致命的严重缺陷。

GNU GRUB 方面也存在缺陷,因为它不能对 int13/ah=8h 所返回的 BL=10h 做出反应。GNU GRUB 仍旧很本分地按照古老的常规方法进行几何参数的确定,而不能适应新的规范、新的变化。需要说明的是,即便 GNU GRUB 按照因循守旧的方法去处理这个新型的存贮设备,本质上这也是没问题的,关键是 U 盘的 BIOS 在(前面所说的那个)敏感问题上搞错了。如果 BIOS 没有缺陷的话,GRUB 也是不会有问题的。所以,问题的本源、它的症结,是在 BIOS 一方。许多 U 盘的 BIOS 可以与 GRUB 和平相处,这就是一个明证。

我们肯定不能解决 BIOS 的 BUG,那是 BIOS 以及主板厂家的事情。我们所能做的,就是在 GRUB 上下功夫。我们让 GRUB 能够发现,这个 BIOS 除了 int13/ah=8h 之外,还有一个 int13/ah=48h 可以利用。因此,我们就得到了合适的几何参数,问题就这样解决了。但是,这不是说 GNU GRUB 就有严重缺陷。像前面说的那样,本质上属于 BIOS 的严重失误,它的  int13/ah=8h 没弄好。它把重要的具有更大事实工业标准地位的 int13/ah=8h 丢弃了,而作为补充,提供了  int13/ah=48h 来亡羊补牢,用一个带贬义的词,就是舍本逐末。我们对 GRUB 所进行的修补,本质上其实是替这个破损的 BIOS 打补丁而已。



因为我们亲手创建,这个世界更加美丽。
2006-7-26 09:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
zts59
中级用户




积分 387
发帖 104
注册 2004-11-19
状态 离线
『第 5 楼』:  

谢谢,试试能不能支持U盘

2006-7-26 18:49
查看资料  发短消息 网志   编辑帖子  回复  引用回复
neiljoy
初级用户





积分 132
发帖 58
注册 2006-7-23
状态 离线
『第 6 楼』:  


http://www.cn-dos.net/forum/view ... &highlight=grub
中可以看出,这个问题具有一定的普遍性,怎么没见到其它人的试用结果呢?为什么不在论坛上说说呢?是成功了,还是无效?总有个说法吧!

[ Last edited by neiljoy on 2006-7-27 at 12:32 ]

2006-7-27 12:29
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
globemobile
新手上路





积分 6
发帖 3
注册 2006-8-3
状态 离线
『第 7 楼』:  

多谢不点!

试了一下,在我这台机上,还是不能读U盘,不过也不死机,而是屏幕滚动若干信息,然后进入命令行。

[ Last edited by globemobile on 2006-8-16 at 09:00 ]

2006-8-7 21:46
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
electronixtar
铂金会员





积分 7493
发帖 2672
注册 2005-9-2
状态 离线
『第 8 楼』:  

关注关注




C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
2006-8-7 22:17
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 9 楼』:  

globemobile:

我们并未编写 USB 设备的驱动程序。读 U 盘的功能是 BIOS 实现的。如果你的 BIOS 不提供 U 盘的 int13 接口,我们是没办法读 U 盘的。neiljoy 的机器的 BIOS 提供了 U 盘的 int13 接口,只不过它含有 BUG 而已。我们生办法躲过了 BIOS 的 BUG,从而可以读取 U 盘。如果你知道自己的主板 BIOS 具有 USB 启动的功能(比如 CMOS setup 中可以见到从 USB 启动机器的选项),那么这个 BIOS 也就提供了 U 盘的 int13 接口。如果你的 BIOS 提供了 U 盘的 int13 接口,那么你可以参考以下这个网页中的详细测试方法,把你的测试结果报告上来,我们仍然有希望针对你的机器的特点,获得访问 U 盘的方法。现在可以肯定,所有在 U 盘读取时出现故障的机器,都是由于其 BIOS 的某个 BUG 造成的(正如我在上面所说的那样),本质上都不属于 GNU GRUB 的错误,更不是 GRUB4DOS 的错误。

http://www.cn-dos.net/forum/view ... ghlight=&page=1



因为我们亲手创建,这个世界更加美丽。
2006-8-20 17:37
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
globemobile
新手上路





积分 6
发帖 3
注册 2006-8-3
状态 离线
『第 10 楼』:  

多谢不点!!!

现在可以启动了!

多谢不点!!!

2006-9-15 21:48
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
nblhj
新手上路





积分 2
发帖 1
注册 2006-12-28
状态 离线
『第 11 楼』:  

grub_for_dos-2007-01-07.zip 是否包含补丁?

2007-2-16 10:25
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Fireflying
初级用户





积分 22
发帖 11
注册 2007-3-24
状态 离线
『第 12 楼』:  

我在128M的U盘里面装MSDOS7.1和老毛桃的WinPE,在联想台式机上面可以顺利启动WinPE,但是在家里的电脑上就死机。
家里电脑是华擎845E主板,U盘是用MSDOS7.1引导,通过Autoexec.bat和
Config.sys做多重配置。选单里面启动的WinPE的对应配置,没有加载任何DOS驱动和内存管理器。
Grub执行完启动A20总线等等检测过程,出现菜单之后的下一步就死机了。

Menu.lst文件的内容如下:

timeout 0
default 0
title  Micro Windows XPE
find --set-root /udiskidx.txt
chainloader /ldrxpe

把“find --set-root /udiskidx.txt”这一行去掉也一样。
U盘在DOS下被识别为USB-FDD,盘符为A。电脑上安装有软驱。
这个问题搞得我非常郁闷,不点能否给一个提示?

[ Last edited by Fireflying on 2007-3-28 at 11:04 PM ]

2007-3-29 12:00
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Fireflying
初级用户





积分 22
发帖 11
注册 2007-3-24
状态 离线
『第 13 楼』:  

对比了一下,这个U盘在联想台式机上面被识别为USB-HDD,而被华擎主板识别为USB-FDD,从这个差异上看,应该属于本帖同样的问题,我用Grub 0.42和0.43版本结果都一样。
不点呢?不是说这个问题已经绕过去解决了吗?为什么我这里还发生同样的问题?期待解惑。

2007-3-31 01:45
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
Fireflying
初级用户





积分 22
发帖 11
注册 2007-3-24
状态 离线
『第 14 楼』:  

不是请大家做进一步测试吗?怎么对我的反馈不加理会?

2007-4-1 08:26
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
不点
银牌会员

不甘寂寞的人


积分 2491
发帖 1115
注册 2003-9-24
状态 离线
『第 15 楼』:  

因为你能够顺利进入 grub 环境,所以我觉得你的这个问题不太严重。

另外,你自己能够有办法进入命令行(比如按 c 键),从而可以提供更加细致的报告。

如果我不能获得进一步的报告,我也无法答复,所以就没有回帖。



因为我们亲手创建,这个世界更加美丽。
2007-4-1 23:32
查看资料  发送邮件  发短消息 网志   编辑帖子  回复  引用回复
« [1] [2] »
请注意:您目前尚未注册或登录,请您注册登录以使用论坛的各项功能,例如发表和回复帖子等。


可打印版本 | 推荐给朋友 | 订阅主题 | 收藏主题



论坛跳转: