或者说,还是感到很生疏。
> 我曾用它在纯DOS下将Win2003的ISO镜像文件虚拟为光驱,并进行安装。
在 DOS 下将 ISO 虚拟为光驱,并能进行安装,并不说明 ISO 文件被完全模拟成物理的 CDROM 了。
我猜想,是不是它把 ISO 文件的扇区内容解读出来,然后再用某个 MSCDEX 兼容的程序把 CDROM 变成某个 DOS 盘符,例如 H: 盘?这并不对 CDROM 硬件 IO 端口进行操作。在实模式下不可能对于 IO 端口进行仿真的。IO 端口在实模式下只能访问真实的设备。
如果是这样的话,这样的仿真不能离开 DOS 而存在。GRUB 的仿真是不依赖于 DOS 的,所以,不能用这种办法来实现。虽然 GRUB 运行在 DOS 下,但是 GRUB 不利用任何 DOS 中断以及 DOS 数据结构。GRUB 只用 BIOS 中断和 BIOS 数据结构。因为 GRUB 要启动其它操作系统,所以,GRUB 与具体的某个操作系统无关。所以,不能像 BCDL 所实现的那样用 ISO 去仿真CDROM。
> 如果修改一下并转换成真正的 SYS 驱动程序应该不会太难吧。
单纯把一个 SYS 转成 EXE,或者反之,这应当不难(我对于SYS的结构也不了解)。但是,不管是 SYS 还是 EXE,它都是 DOS 内部使用的概念,不能由 GRUB 来借用。我觉得 GRUB 去学它,这条路是走不通的。当然了,如果讨论的不是 GRUB 而是如何从 ISO 文件引导系统,则是完全可以的。但我觉得从 DOS 内部实现这个,仍然有(别的一些)少量(但并不容易解决的)困难需要面对(不讨论这个了)。
> BCDL.BIN本身应该并非直接对光盘的物理地址进行操作,而是BCDL.BIN在真正加载前,首先调用一个DOS光驱驱动程序(如VIDE - CDD.SYS、OAKCDROM.SYS之类的),由这个光驱驱动程序来对物理光盘进行操作和驱动,然后由BCDL.BIN使用MSCDEX的 INT兼容方式对光盘进行真正加载并启动。如果用SHSUCDHD.SYS(即SHSUCDHD.EXE的SYS版本)来做为中间的那个光驱驱动程序来虚拟ISO 镜像文件的话,那展现在BCDL.BIN面前的就是一个真正的物理光驱了,因为BCDL.BIN并不直接存取光驱的物理地址,而只是根据已加载的DOS光驱驱动程序来进行下一步的操作的。
由于我不熟悉,这段话还不很懂。BCDL首先加载 SYS 光驱驱动,那么,可不可以这么说:SYS 文件运行于 DOS 环境? SHSUCDHD.EXE显然是运行于 DOS 的。如果 SYS 文件并非运行于 DOS 的,而我们想把 SHSUCDHD.EXE 转换成这样的 SYS 格式,恐怕即使转换成功,也不能使用。即使能够使用,还有问题:你说了,BCDL使用MSCDEX兼容方式处理光盘,也就等于说,是在 DOS 之下模拟 ISO 为一个盘符了。这只能用于 DOS 兼容的操作系统,不能用于 LINUX 等其它系统。LINUX 是不知道盘符的。
呵呵,我很糊涂,所以,说的可能也比较可笑了。如果你发现我有不清楚的概念,可以继续指出来并给以解释。
> 我曾用它在纯DOS下将Win2003的ISO镜像文件虚拟为光驱,并进行安装。
在 DOS 下将 ISO 虚拟为光驱,并能进行安装,并不说明 ISO 文件被完全模拟成物理的 CDROM 了。
我猜想,是不是它把 ISO 文件的扇区内容解读出来,然后再用某个 MSCDEX 兼容的程序把 CDROM 变成某个 DOS 盘符,例如 H: 盘?这并不对 CDROM 硬件 IO 端口进行操作。在实模式下不可能对于 IO 端口进行仿真的。IO 端口在实模式下只能访问真实的设备。
如果是这样的话,这样的仿真不能离开 DOS 而存在。GRUB 的仿真是不依赖于 DOS 的,所以,不能用这种办法来实现。虽然 GRUB 运行在 DOS 下,但是 GRUB 不利用任何 DOS 中断以及 DOS 数据结构。GRUB 只用 BIOS 中断和 BIOS 数据结构。因为 GRUB 要启动其它操作系统,所以,GRUB 与具体的某个操作系统无关。所以,不能像 BCDL 所实现的那样用 ISO 去仿真CDROM。
> 如果修改一下并转换成真正的 SYS 驱动程序应该不会太难吧。
单纯把一个 SYS 转成 EXE,或者反之,这应当不难(我对于SYS的结构也不了解)。但是,不管是 SYS 还是 EXE,它都是 DOS 内部使用的概念,不能由 GRUB 来借用。我觉得 GRUB 去学它,这条路是走不通的。当然了,如果讨论的不是 GRUB 而是如何从 ISO 文件引导系统,则是完全可以的。但我觉得从 DOS 内部实现这个,仍然有(别的一些)少量(但并不容易解决的)困难需要面对(不讨论这个了)。
> BCDL.BIN本身应该并非直接对光盘的物理地址进行操作,而是BCDL.BIN在真正加载前,首先调用一个DOS光驱驱动程序(如VIDE - CDD.SYS、OAKCDROM.SYS之类的),由这个光驱驱动程序来对物理光盘进行操作和驱动,然后由BCDL.BIN使用MSCDEX的 INT兼容方式对光盘进行真正加载并启动。如果用SHSUCDHD.SYS(即SHSUCDHD.EXE的SYS版本)来做为中间的那个光驱驱动程序来虚拟ISO 镜像文件的话,那展现在BCDL.BIN面前的就是一个真正的物理光驱了,因为BCDL.BIN并不直接存取光驱的物理地址,而只是根据已加载的DOS光驱驱动程序来进行下一步的操作的。
由于我不熟悉,这段话还不很懂。BCDL首先加载 SYS 光驱驱动,那么,可不可以这么说:SYS 文件运行于 DOS 环境? SHSUCDHD.EXE显然是运行于 DOS 的。如果 SYS 文件并非运行于 DOS 的,而我们想把 SHSUCDHD.EXE 转换成这样的 SYS 格式,恐怕即使转换成功,也不能使用。即使能够使用,还有问题:你说了,BCDL使用MSCDEX兼容方式处理光盘,也就等于说,是在 DOS 之下模拟 ISO 为一个盘符了。这只能用于 DOS 兼容的操作系统,不能用于 LINUX 等其它系统。LINUX 是不知道盘符的。
呵呵,我很糊涂,所以,说的可能也比较可笑了。如果你发现我有不清楚的概念,可以继续指出来并给以解释。
因为我们亲手创建,这个世界更加美丽。

精华I

