Board logo

标题: [下载]grub4dos用内存仿真磁盘,请测试 [打印本页]

作者: 不点     时间: 2005-1-12 00:00    标题: [下载]grub4dos用内存仿真磁盘,请测试
用磁盘文件仿真磁盘的一个主要缺陷是,要求该磁盘文件必须连续。这个连续性的要求是很苛刻的,例如 Linux 的 ext2/ext3 分区是做不到的。把磁盘映象拷贝到扩展内存的顶端来仿真,就避免了这一缺陷。



用磁盘介质仿真的优点:可以部分地支持 Win98 等保护模式的操作系统,而新的 memdrive 就不支持了。用旧的磁盘介质的仿真方法,可以支持任意大小的映象文件(最大2000GB),而新的 memdrive 受系统中所拥有的物理内存容量的限制。



用 memdrive 的优点:可以支持非连续的映象文件,并且支持 gzip 压缩的映象。



要想利用新的 memdrive 仿真功能,还需要满足以下限制条件。



1. 主板 BIOS 支持 int15/EAX=e820h 功能调用。不支持该功能的主板,将不能使用 memdrive。一些旧的笔记本电脑可能受影响。

2. 系统物理内存必须超过 64M,memdrive 不使用 64M 以内的内存来仿真磁盘,它只使用高于 64M 的内存。所以,如果只有 64M 内存,那么就无法使用 memdrive 了。



用 RAM 内存来仿真磁盘: memdrive

download the binary build(2005-01-12, test only) here:


ftp://ftp.linuxeden.com/tinybit/grub.exe


ftp://ftp.linuxeden.com/tinybit/grldr


ftp://ftp.linuxeden.com/tinybit/grub4lin


or here:


http://grub.linuxeden.com/wakka.php?wakka=UploadFile/files.xml&action=download&file=grub_test.tar.gz





Example:





map --mem (...)/.../floppy.img (fd0)


map --hook


chainloader (fd0)+1


rootnoverify (fd0)


boot



memdrive 比 syslinux 中 memdisk 的功能要强大一些。syslinux 中的 memdisk
只能仿真一个磁盘,并且必须从该仿真盘启动。我们的 memdrive
支持多个磁盘仿真,甚至其中可以混杂着旧的那种利用磁盘介质的非mem方式的仿真,而且被仿真的磁盘不一定作为启动盘,很灵活。


作者: blue777     时间: 2005-1-12 00:00
太好了!顺便问下不点兄:Wengier的超级MS-DOS 7.10 BootDisk是 GRUB0.595引导的,带有stage1、stage2的那种,如何制作出这种引导的启动盘?或者有没有办法在软盘上用GRUB0.95来做?我一直试图联系Wengier向其咨询,可总联系不上,盼论坛高手给予答复!

作者: 不点     时间: 2005-1-12 00:00
Wengier之所以采用很老的 0.5.95 版本,我猜想,主要是因为这个版本的体积小,适合于放在软盘上。如果你的软盘空间不是很紧张,建议用最新的 0.95 版本。

首先把 boot/grub 目录拷贝到 软盘的该目录下(也就是说软盘上存在 /boot/grub 目录),然后,如果空间紧张的话,删去与 FAT 无关的那些个stage1.5文件,进入 grub ,在 grub> 提示符下敲入

root (fd0)
setup (fd0)

这就完成了,这张软盘就可以引导 grub 了。

不过,以后假如删掉了 stage2 文件,即使后来又拷贝一个过来,恐怕也不能启动了,必须重复上面的步骤才能再制作一个启动盘。

---------------------------

另外,一个更简单的办法是,你直接下载
ftp://ftp.linuxeden.com/tinybit/qlinux_setup.img
将它制作成软盘。
这个映象是一个 FAT12 格式的,你只要复制任意一个 GRLDR 文件到它的根目录,就可以引导 GRUB 了。除了 GRLDR之外,其它所有的文件和子目录,都可以通通删去。也就是说,整个软盘只要有一个 GRLDR 在根目录就行了。软盘的第一扇区不是 DOS的引导程序代码,而是 GRLDR 的引导代码,在执行时,这个引导程序不去寻找 IO.SYS 文件,而是要寻找 GRLDR 文件。



作者: blue777     时间: 2005-1-13 00:00
谢谢不点兄的认真详细讲解,祝不点兄GRUB研究项目更进一层楼!也祝中国dos联盟成为世界范围的专业联盟!

作者: pierrexqw     时间: 2005-1-16 00:00
呵,已经做好这个功能啦~:)

作者: coooooolee     时间: 2005-2-6 00:00
不点老弟:最近研究ghost 8.0,想利用ghost8.0中的网络影射功能完成网络备份,因为我这里的机器很多,配置比较杂,各种各样的网卡都有,所以呢就想把ghost8.0种所包含的dos网卡驱动都整合到一张启动盘里面去,然后刻录到光盘上,现在有一个问题无法解决:就是ghost8.0的网卡自动检测功能运行完毕以后要写盘,而光盘是只读的,最开始的时候想使用ramdisk来解决这个问题,但是还是有一些技术问题解决不了,后来在网上查找,发现可以利用grub+memdisk可以实现这个功能,可是老兄年纪有些大了,脑子有些不太灵光,搞了许久也没有弄得太明白,现在我的问题是:如何使用Easyboot调用grub,然后再调用memdisk?通过Easyboot启动grub需要调用那一个文件?这个文件必须放在光盘的根目录下吗?Easyboot调用grub的时候是非模拟方式吗?希望老弟能给一些提示。万分感谢。

作者: 不点     时间: 2005-2-7 00:00
老兄过年还在干活,令人敬佩。先祝新年快乐。

我先说明,我不曾了解过 easyboot 这个工具,刚才搜索了一下,才知道它是一个光盘制作工具。我想,您大概是想要一个能够从光盘启动 grub 的方法吧。

第一种办法,用 bootable cdrom no-emulation mode 这一规范,来制作启动盘,需要用到随 grub一起发行的stage2_eltorito 文件。这种方法在 grub 的联机手册以及info帮助手册中有详细说明,但我没有研究过,所以,我无法在此详说。

第二种办法,用光盘中的软盘映象的方法,首先启动一个 DOS,在 autoexec.bat 中加入 grub.exe 就可以启动 GRUB 了。这里的软盘映象,可以直接采用 win98 的启动软盘(删掉一些多余的文件,可以节约空间)。您也可以下载这个文件

ftp://ftp.linuxeden.com/tinybit/qlinux_setup.img

这是个软盘映象,将里面的文件全部删除,然后拷贝一个最新的 grldr 文件进去,就成为一个能够直接引导 GRUB 的软盘了。建议你采用后者。

我刚刚制作了一个新的 grub for dos, 在这里:

ftp://ftp.linuxeden.com/tinybit/grub_for_dos-0.4.0pre.tar.gz

这个 0.4 的版本支持您要的 memdrive 功能。看看里面的 readme 文件,其中有举例说明。

另外,您提出的问题是如何在 GRUB 中调用 memdisk,关于这一点,网络上也有文章,下面是我搜索到的一个举例:

kernel /boot/grub/memdisk c=32 h=8 s=36 floppy
initr /boot/grub/7200.zip
boot

在 GRUB 中执行上述三条命令就可以从该软盘映象启动了,
其中 c 表示柱面数,h 表示磁头数,s 表示扇区数
7200.zip 就是软盘映象文件本身。memdisk 是 syslinux 中的一个文件,网络上可以搜索到它,下载用了就行。

希望这些能够帮助解决您的问题。

作者: windrv     时间: 2005-2-8 00:00
Dear Tinybit,
I have tested your memdrive feature.
It can boot from memdrive floppy but not from a memdrive harddisk.
Have you been successful in mapping a bootable partition image file into (hd0) and boot from it?
If yes, could you give an example about how it is to be done?

作者: windrv     时间: 2005-2-8 00:00
Dear Tinybit,
Another thing. Could you add ntfs support into grldr/grub.exe/grub4lin in your new build?
Please give us a link for download.
Thanks a lot!

作者: windrv     时间: 2005-2-8 00:00
Dear Tinybit,
It seems that ntfs support is built in. But it seems to relate to the option --mem
It runs it from QEMU with a (hd0,0) in NTFS partition setup with grldr.
On grldr command line, it shows:
map .... (fd0)
as successful
but
map --mem .... (fd0)
with an error message: error 1: filename must be an absolute name or blocklist.
What happens?

作者: 不点     时间: 2005-2-8 00:00
> Have you been successful in mapping a bootable partition image file into (hd0) and boot from it?

不,partition image file 不可以被 map,只有 whole drive image 才可以被 map。

map --mem (...)/hda.img.gz (hd0)
map --hook
chainloader (hd0)+1
boot

例子文件 hda.img.gz 可以从 ftp://ftp.linuxeden.com/tinybit/ 下载得到。这个 hda.img.gz已经经过了成功的测试。请同时下载刚刚更新的 grub.exe, grldr 和 grub4lin 文件(在上述相同的FTP网址,文件日期是 2月 8 日的),以便测试您所提到的 NTFS 的问题。这些文件含有调试信息,测试时,请贴出 map --mem 命令的输出结果。

另外,你的硬盘上有几个 GRLDR?会不会你调用的是旧的 GRLDR?请将所有硬盘上的所有的 GRLDR 文件全部删除,然后拷贝最新的 GRLDR 进去,再做测试。




作者: windrv     时间: 2005-2-12 00:00
Dear Tinybit,
Happy Chinese New Year!
There is not much problem with your new pre04 version.
Finally I could get it right for booting from a USB flash drive . It boots from a NTFS partition of the booting USB flash drive with grldr setup on (hd0,0).
With some tweaking, I could load up a 400M FAT32 bootable disk with --mem option.
It seems that I have to write out IO.SYS, MSDOS.SYS & COMMAND.COM onto the disk image file first before the memdrive can read the disk image file; otherwise it turns out a disk read error. I have not thoroughly tested on this. But you could try.
About how to build the disk image file, one can download the trial version of WINDRV at windrv.net. It includes a WINDRV Client Configurator. Help documentation has been loaded on the website.
Briefly speaking, you have to build a partition image file with your content and bootable system files above. Then use MBR/BS Manager to add a valid boot sector to your partition image file. And then use Build Disk Manager to add the partition image file to a disk image file. You can simply use the default settings. And then you use the MBR/BS Manager to add a valid MBR to the disk image file. And you can use it with your --mem option or with syslinux's memdisk.
Your --mem option however cannot be used to load Win9x as it seems to play directly with the BIOS hard disk interrupt that Win9x seems not liking it and refuses to load; while memdisk works perfectly with Win9x. Memdisk is also able to let people using memory more than 1G. Suppose you have 2G memory, you can use one 1G for memdisk and 1G left for Win9x. I have not tested it for more memory, and I could tell you later when I find more memory. Memdisk also works well with our WINDRV as Memdisk uses Int15 that does not use HIMEM.SYS to handle memory while our WINDRV uses HIMEM.SYS to handle memory.
If one wants to use more memory drives with memdisk, one can use WINDRV's Build Disk Manager to add more partition image files to the disk image file and memdisk can recognize the disk with more drives as there are partition image files within the disk image file.
One inconvenience with memdisk is that it disables the use of internal hard disk(s) after loading up.
To make Win9x run perfectly all in ram, you can either use memdisk/our WINDRV or both working together. To run Win9x all in ram stably for all purposes, you need to use our WINDRV's virtual disk manager to add a virtual disk drive for storing Windows Swap file; otherwise, some critical applications or hardware may fail such as USB drives, USB CDROM, E4M, etc.

作者: gmy     时间: 2005-2-12 00:00
谢谢不点, 我个人觉得还是0.2.0 pre9 好用一些,我的 一键GHOST 就是以该版为内核的.总觉得 新版有些脱离原味, 如 boot form cd 功能不能用, 新 memdisk 对系统要求较高......另外,还有一个问题,使用旧版(可能是pre9) 的 GRLDR 汉化版 和 GRUB.exe 汉化版 能否启动 新版 0.4.0 ? (嫁接c:\boot\grub\*.* 可以吗?)

作者: 不点     时间: 2005-2-12 00:00
谢谢,非常感谢诸位的大力协助。这个 memdrive 的仿真代码,完全是我自己写的,没有参考 syslinux 中的memdisk,所以,某些地方不如 memdisk 好。不过,既然有人发现毛病了,我就要考虑去解决它了。gmy 所说的对系统要求较高,这一点我不打算解决。因为我觉得不值得去特别照顾老机器(如果我的老奔二 PII 128M RAM都很顺利的话,真不能想象现在还有比这更低档的机器)。如果实在想用老机器,那么 memdisk 就是一个很好的选择。

scdrom 没有编译进去,因为这个模块我没有精力去维护,出现的 BUG 我无法去排除。而 gandalf的中文版本包含了这个模块,所以,如果需要这个模块,就等着 gandalf 的中文版。如果可能的话,建议在 GRUB 中直接启动sbm.bin,这也是一个启动 CDROM 的办法。

用任何一个旧版本的 GRUB(甚至包括未经改动的原始的 GNU GRUB),都可以启动新版本的 GRUB for DOS,方法很简单,是这样的:

kernel (...)/.../grub4lin
boot

用这种办法,你无需安装 GRUB 新版本就可以自由地使用它了。那些 boot/grub/*.* 文件没有太大用处,删掉也可。



作者: 不点     时间: 2005-2-12 00:00
0.2 系列是个不再维护的版本。建议转向 0.4 系列。



0.4 中包括了一些新的命令参数



map --floppies=2



让 BIOS 数据区中的软盘个数成为 2



map --harddrives=3



让 BIOS 数据区中的硬盘个数成为 3



假定你有两个真实的硬盘,现在,如果你想禁止 (hd1),就可以这样:



map --harddrives=1



本来你有两个硬盘,现在这个数目变成了 1, 那么,你可以试试,在启动进入 DOS 或者 win98 后,硬盘个数是否已经减少了。



这是禁止访问 (hd1) 的另外一种方法了,以前是用 map --disable-chs-mode --disable-lba-mode 来禁止。这次不用仿真就能禁止。



作者: 不点     时间: 2005-2-21 00:00
请有兴趣的兄弟姐妹们测试GRLDR引导代码的查找功能。

在任意一个磁盘、任意一个分区的根目录下放置 GRLDR 文件,GRLDR 的引导代码都可以找到它。

测试方法是这样的:首先将机器上所有的 GRLDR 统统删去,将新的 GRLDR 文件拷贝到 C: 盘根目录,并更名为 GRLDR1。修改boot.ini,增加一行 C:\GRLDR1="GRLDR1",用这行来启动,肯定找不到 GRLDR 文件,但是,屏幕上应当显示查找GRLDR 的全过程,你的全部硬盘和全部分区都应当列出来了,如果有未列出的硬盘或者分区,则视为 BUG。

上述测试完毕,接着测试:将 GRLDR 拷贝到某个硬盘的某个分区的根目录,仍然用上述的 C:\GRLDR1="GRLDR1" 一行来启动,看看这次 GRUB 是否顺利启动了。如果没有启动,则视为 BUG。



作者: 不点     时间: 2005-2-21 00:00
下载地址: ftp://ftp.linuxeden.com/tinybit/grldr

这个文件会不断地更新,在初次测试失败时,两天之后再下载一次,请不断地测试它。谢谢。


也可以做第三个测试:当上述硬盘分区查找完毕后,会查找软盘 A:的(但永远也不查找软盘 B:)。所以,现在删除硬盘上的 GRLDR,在软盘根目录放置 GRLDR,看看上述 GRLDR1 的启动代码是否可以找到它。


第四个测试,如果上述查找全部失败,则接着会尝试启动你先前备份的一个 MBR。第一块硬盘 hd0 的第二个扇区,也就是紧接 MBR
之后的那个扇区,可以用来存放你想放置的任何启动扇区,可以是旧的 MBR,也可以是一个分区的引导记录,例如 DOS boot
record,还可以是你自己写的任何其它引导代码。无论你放置什么,它都称做 previous
MBR(这只是一个称呼而已)。这个引导代码的末尾两个字节必须是通常的 55, AA
才被认为是一个合法的引导扇区,否则不予启动。好了,你用DEBUG或者其它工具将你想要启动的引导扇区写入 hd0 的第二扇区,并将硬盘和软盘上的
GRLDR 都删除,然后测试上述的 GRLDR1 是否能够引导它。(既然这里有写入硬盘的操作,所以还是应该提醒一下,这很危险,不能熟练使用
DEBUG 的兄弟,千万不要自己尝试,否则,你的硬盘会很容易毁于一旦的。)


更进一步的技术实现:在 GRLDR 文件的最开头,是一个双字节的 jmp
指令,紧接该指令之后的字节,也就是第三个字节(在偏移地址0x02),它不是程序代码的一部分,而是被用来控制 GRLDR
的查找操作方式。当该控制字节的第0位被设置为1时,软盘的查找就被禁止了。当该控制字节的第1位被设置为1时,一个不含分区表的 previous
MBR 将被禁止启动。此时要求你所备份的 previous MBR 确实是你以前的 MBR,而不是某个分区的 partition boot
record。该控制字节的其它位被保留作为将来之用。这个控制字节在默认时是0,也就是说,它对什么都不禁止,所有的操作都处于最大开放状态。该控制字
节的用途很明了,用户程序可以放心地根据自己的需要任意写入该字节(当然注意不要破坏了其余那些不该写入的字节,尤其是,当该扇区处于 MBR
时,当然要更加小心了)。

作者: hnlyzhd     时间: 2005-2-25 00:00
我已经将GRLDR的引导部分提取为GRUB.DAT.....可以在BOOT.INI或用NT软盘加载GRUB.DAT来启动自动寻找各分区根目录下的GRLDR,这样就解决了原来GRLDR只能在系统盘的限制了.....下载:http://bbs.wuyou.com/cgi-bin/topic.cgi?forum=34&topic=7201&show=0

作者: 不点     时间: 2005-2-25 00:00
很棒!

正如你所注意到的,GRLDR 的引导代码就是位于 GRLDR 最开头的 16 个扇区,你制作的 GRUB.DAT 必须至少是 16扇区的(也就是 8192 字节),比 16 扇区多了也行,但决不能少,如果少了,查找可能要失败。如果比 8192字节多,那么多余的字节不起任何作用(但也没有任何坏处)。



作者: hnlyzhd     时间: 2005-2-25 00:00
是否能够启动逻辑分区上面的GRLDR呢,我还没有测试呢,请不点兄指点...还有就是你所说的MEMDRIVR我下载不到,能否发我信箱以便测试hnlyzhd@163.com

作者: 不点     时间: 2005-2-25 00:00
可以启动逻辑分区上的 GRLDR,但是,和通常一样,只查找其根目录。

在 linux 下用 ftp 命令手动登入 ftp.linuxeden.com 就可以下载了。wget 命令有时无效,在执行 PASV命令时长时间无回应。windows 下的那些下载工具,比如 flashget, 影音传送带等等,也都通通无效,表现方式也是在执行 PASV命令是失去响应。估计这是一个什么病毒干的,挺厉害的,可惜似乎没人报告这个病毒。

在 linux 下还有一个命令可以应付这种情况,试试 curl 下载,一般能成功:

curl --ftp-port 20 -C - -O ftp://ftp.linuxeden.com/tinybit/grldr

念出来:

curl 空格 杠杠ftp杠port 空格 20 空格 杠大写的C 空格 杠 空格 杠大写的O 空格 后面就是接着URL地址。

在 windows 下用 FTP 手动登录似乎也不行的。

-----------------------

我会发给你的,不过不是现在,因为我还要改,把修改后的新版本再给你寄去。



作者: hnlyzhd     时间: 2005-2-25 00:00
谢谢...前面提到的几个文件已经下载,只是没有MEMDRIVE,等你做好了发我信箱就行,再次感谢..我在无忧设的有一个GRUB学习专区,如果你有时间,请到这里指点一二,Gandalf也经常在http://bbs.wuyou.com/cgi-bin/topic.cgi?forum=34&topic=5697&show=0

作者: 不点     时间: 2005-2-25 00:00
那么,无需再发邮件了,因为需要的文件你都得到了,它就是 grub.exe, grldr, grub4lin 之中的任何一个。

注意它们还会不断更新的。

作者: blue777     时间: 2005-2-25 00:00
不点兄你好,请教您下列问题:我在软盘里安装未将scdrom编译进去的GRUB时(用的是stage1和stage2),实现从光驱引导只有借助于BCDL.BIN和VIDE-CDD.SYSBoot from CD-ROM
root (fd0)
chainloader /boot/grub/cdboot.bs为了给软盘启动盘腾出更多空间,我想将scdrom编译进stage2里,这样scdrom --bootcd就可从光驱引导了,如何在Windows或DOS下将scdrom编译进GRUB的Stage2里?我没有Linux环境,也不知道编译方法.grub-0.96-patch6-scdrom和grub-0.96-patch7-bioscdrom有区别么?我能将最新版scdrom编译进低版本的GRUB如0.90版的Stage2吗?因为我用不着新功能,只想stage2既小又能支持从光驱引导,不吝请教,谢谢!

作者: hnlyzhd     时间: 2005-2-25 00:00
楼上的,请不要做重复的工作,0.95的S\TAGE2已经支持SCDROM

作者: 不点     时间: 2005-2-25 00:00
有两个办法,其一是用 gandalf 制作的版本,scdrom 模块其实是由他提供的,因为我无法解决碰到的BUG,所以,我不打算再维护这个模块了。他从 smart boot manager 里面提取出来的程序,我不能读太懂,所以,我无法继续维护。

第二个办法,可以从 GRUB for DOS 里面调用最原始的 sbm.bin,这个方法也可以启动 CDROM。sbm.bin 来自于smart boot manager ,你可以从网上搜索到这个文件,下载它用了便可。在 grub4dos 中调用 sbm.bin的方法,也可以从网络上搜索得到,例如 http://grub.linuxeden.com 上面就有介绍。sbm.bin 只有 18K,应该说还是可以接受的。

bioscdrom 模块是我自己写的,目前只能用于华硕的某些旧型号的机器,所以基本没用,你就不要编译它了。这个模块也基本上停止维护了,因为这个事情不是很重要的,它不作为优先解决的对象。将来实在有闲功夫了,再去考虑增强它的问题。

你没有 linux, 是无法编译 grub 的,如果你实在想编译,还是安装一个 linux 吧。

最省事的就是坐着等,等 gandalf 做出来一个可靠的版本直接用就行了。

虽然我的发布中仍然有 scdrom 补丁,但是我不能肯定它现在还工作,因为我没有试验过。因此之故,我不会提供一个含有 scdrom 模块的二进制文件的发布。

总而言之,gandalf 对此很熟悉,有问题最好能同他联系。


作者: hnlyzhd     时间: 2005-2-25 00:00
1.gandlaf已经换工作了很忙没时间开发GRUB2.他的版本支持SCDROM已经很好.title 从光盘启动
scdrom --bootcd
scdrom --bootcd用两次命令就行了,光驱启动是GRUB的老问题了,这样已经很好3.建议不点兄为GRLDR加入安装到硬盘功能,写到MBR上,按下热键才寻找GRLDR,否则从硬盘正常启动(GANDLAF写过一个类似的STAGE1文件)

作者: hnlyzhd     时间: 2005-2-25 00:00
不点兄,请你在修改chainloader功能的时候,看能否启动下面的这个BIOS模块...{{{http://bbs.wuyou.com/cgi-bin/attachment.cgi?forum=33&topic=1387&postno=9&type=.rar&name=Idiopf_1108629898}}}}}

作者: 不点     时间: 2005-2-25 00:00
> 按下热键才寻找GRLDR,否则从硬盘正常启动

想法还真有趣,赞一个。目前已经实现的,是先查找 GRLDR,失败时才启动以前的 MBR备份。我会考虑再改改,做到让这个先后顺序可控制。

------------------

那个 BIOS 模块的结构怎样?它被装载到内存中什么位置?它在内存中占有多少空间?

我不需要打开它,只要知道这些情况,就知道能否用 chainloader 来做了。



作者: hnlyzhd     时间: 2005-2-27 00:00
在逻辑分区上启动GRUB不稳定,有时候不能启动成功,并且加载中文字体会乱码

作者: 不点     时间: 2005-2-28 00:00
启动失败时,屏幕显示什么,麻烦你全部抄写下来,以便定位出错地点。

我发布的GRUB版本,中文支持是没有的。



作者: hnlyzhd     时间: 2005-2-28 00:00
GRLDR MISSING

作者: 不点     时间: 2005-2-28 00:00
提供再多一点信息。你这个是 NTFS 文件系统所发出来的信息。但是你没有写出它的分区号码,也就是 (hd?,?)。你确认该分区根目录下有 GRLDR 文件吗?



失败时,(hd?,?) 中的硬盘和号码是什么?该分区的文件系统类型(例如 NTFS)是否正确列出来了?这两点很重要。





作者: hnlyzhd     时间: 2005-3-4 00:00
已经下载最新的GRLDR,正在多人测试和使用中,有问题会及时写上..我将会把相关出错信息详细记录...还有不点兄能否提供一下FREEDOS的COMMAND文件,大小在20K左右,能支持FAT32分区就行,还有常用的几个命令

作者: 不点     时间: 2005-3-4 00:00
你到 freedos.org 上下载吧。

20K 的 command 估计是没有的。



作者: hnlyzhd     时间: 2005-3-5 00:00
启动出现错误码,只能找到主分区的GRLDR,其他分区找不到了..



作者: hnlyzhd     时间: 2005-3-5 00:00
不过这个新的版本倒是可以加载中文版的GRLDR了,上一版的不支持中文的GRLDR,这次的大小好像比上次小了好多

作者: 不点     时间: 2005-3-6 00:00
我注意到你的扩展分区中的逻辑分区大部分都是 FAT32 的格式,只有一个 NTFS 的。我猜测在 FAT32 的情况下会失败,而那个 NTFS 仍然会成功的,请你再试验一下,看是否如此,然后我再去修改一下程序。

谢谢。

另外,你说加载中文版的 GRLDR,我想知道你用什么方法或者命令加载的?能贴出来看看吗?


作者: blue777     时间: 2005-3-6 00:00
不点兄,请教几个问题:
1.用 grub4dos 在内存中虚拟一个 win98
map --mem (hd0,0)/win98.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
boot
这里的win98.img有何要求?是怎么做出来的?直接将安装了win98的c:盘用winimage保存整个分区?
2.我用虚拟机载入放有grub.exe和\boot\grub\(stage1,stage2)的2.88M 镜像,启动到dos,setup(fd0)提示找不到stage1,难道grub4dos只支持安装在1.44M的软盘上么?
3.目前grub4dos支持安装到U盘么?比如我可启动型的U盘引导系统后,在dos下盘符是a:,那么难道用setup (fd0)来安装?
谢谢您的回答!

作者: hnlyzhd     时间: 2005-3-6 00:00
以下是引用不点在2005-3-6 10:18:43的发言:
我注意到你的扩展分区中的逻辑分区大部分都是 FAT32 的格式,只有一个 NTFS 的。我猜测在 FAT32 的情况下会失败,而那个 NTFS 仍然会成功的,请你再试验一下,看是否如此,然后我再去修改一下程序。

谢谢。

另外,你说加载中文版的 GRLDR,我想知道你用什么方法或者命令加载的?能贴出来看看吗?


不支持FAT32的分区不大好吧,我有两个NTFS分区,在主分区可以找到,在扩展的NTFS分区还是找不到...
加载中文版的GRLDR,我是把你的这个新版的GRLDR的引导区载取了,在NTLOADER的BOOT.INI中加载来寻找和启动GANDALF的中文GRLDR的....

作者: 不点     时间: 2005-3-6 00:00
hnlyzhd:

FAT当然得支持才行。我又发现了几个错误,是有关 FAT 格式的,准备修改。在扩展的 NTFS 分区找不到 GRLDR,性质比较严重。我测试我的机器,在扩展分区都是可以找到的。都是 NTFS 格式。我本来想在4月发布正式版,看来不可能了。

---------------------

blue777:

1.这里的win98.img有何要求?是怎么做出来的?直接将安装了win98的c:盘用winimage保存整个分区?
不是保存整个分区,而是保存整个硬盘。分区的虚拟,目前还不支持,但以后会支持的。你的硬盘要小一点才行。如果你感觉不方便,那你可以等着支持分区的虚拟之后再使用这种方式。
2.我用虚拟机载入放有grub.exe和\boot\grub\(stage1,stage2)的2.88M 镜像,启动到dos,setup(fd0)提示找不到stage1,难道grub4dos只支持安装在1.44M的软盘上么?

我对于老式的GNU GRUB安装方式,不再研究了。这种方式存在的问题很多,我现在所做的工作,比如linux分区的支持等等,其目的就是要淘汰这种安装方式。你试试用 grldr 的安装方式,应当没问题的。

3.目前grub4dos支持安装到U盘么?比如我可启动型的U盘引导系统后,在dos下盘符是a:,那么难道用setup (fd0)来安装?安装到 U 盘是完全可以的。建议还是用 GRLDR 的方式来安装。在 http://grub.linuxeden.com/ 上有说明。没说是 U 盘,但说的是 软盘和硬盘,你照着做试试吧。

安装到 U 盘,有人说成功,也有人说失败。我倾向于认为,那些失败的,八成是 BIOS 隐藏的 BUG 所造成的。



作者: hnlyzhd     时间: 2005-3-6 00:00
我刚才又进行了十多次测试,全是在VM虚拟机中测试的,但是加载的是真机硬盘,应该和真机是一样的,主分区启动正常,但在扩展的NTFS,只有一次启动了,进入了GRUB命令行模式...

作者: 不点     时间: 2005-3-6 00:00
虚拟机的情况很特殊,这个不算是问题,眼下不把这当成问题。因为虚拟机在 BIOS 阶段有可能错误。你的 磁盘是真实的, 但 BIOS却可能是错误的,所以,这可能影响到 我们完全依赖 BIOS 的操作过程。grub 完全依赖于 BIOS。不象 windows 和linux,都可以脱离 BIOS 而访问磁盘。



作者: blue777     时间: 2005-3-6 00:00
不点兄,谢谢您的答复,用grldr引导软盘,下面方法有几处不清楚之处:
b. 将软盘第一扇区读入内存区域1,将 GRLDR 第四扇区读入内存区域2。
c. 将 内存区域1 的 0x02 至 0x3d 这 60 个字节复制到 内存区域2 的 0x02 至 0x3d。
d. 将更改后的 内存区域2 写入软盘第一扇区。
读扇区到内存和写扇区到内存用什么软件?能否简要说明下方法步骤?
修改内存用WinHEX之类么?如何界定第一扇区,第二扇区,第三扇区.....?谢谢!

作者: 不点     时间: 2005-3-7 00:00
这段话是针对编程者来说的。对于非编程者而言,可以用以下通俗的语言来解释:

简单而言,用一句话就是:直接用 GRLDR 的第4扇区覆盖软盘的第一扇区(也就是DBR引导扇区)。但是有一点需要更正,叙述如下:

在 GRLDR 第 4 扇区中,从偏移 0x02 到 0x3d 这 60 个字节(也就是第 3 到第 62 这 60个字节),不是程序代码,而是数据,并且这些数据必须取自软盘的相应区域。否则,你制作的软盘就不是 FAT 格式的了,因而 DOS就认为它还没有格式化。

也就是说,你生办法把软盘的第 3 到第 62 这 60 个字节保存下来,比如记录到纸上。然后用 GRLDR 第 4扇区覆盖掉软盘的引导扇区。完了之后,再用一个 diskeditor 十六进制编辑器软件,将该引导扇区的 第 3 到第 62 这 60 个字节恢复成原先软盘上的旧的数据,也就是你刚才记录下来的值。这就 OK 了。

在此之后,你朝软盘的根目录拷贝一个 GRLDR 文件就成为 GRUB 引导软盘了。

这个方法对于任何 FAT12/16 格式的软盘都是适用的,不管是标准的,还是非标准的软盘,都一样是成功的。

所谓一个扇区,就是指 512 字节的一个数据块。第一扇区就是最开头的 512 字节,第二扇区就是从 第 513 到 第1024 字节这 512 个字节,等等,依此类推。



作者: blue777     时间: 2005-3-7 00:00
多谢不点兄,我用WinHex将grldr的第4扇区覆盖软盘的第1扇区,并恢复了事先保存的软盘第1扇区第3到第62这60个字节到原位置,在虚拟机中成功启动,但问题又来了,我发现将此image做成可引导CD,在虚拟机中却不能启动,而之前用stage1,stage2方式制作的image做成可引导CD,在虚拟机中启动很顺利.还有一点,用虚拟软驱vFloppy虚拟启动后,如下项目不可用了:
title Boot from image file (hd0,0)/floppy.img
map --mem (hd0,0)/floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
title Smart Boot Manager
map --mem /sbm.gz (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)
title Memtest86+
kernel /memtest.gz

作者: blue777     时间: 2005-3-9 00:00
酷啊!grub_for_dos-0.4.0pre4支持单分区代替整个硬盘的image镜像在内存里仿真运行了!不点兄辛苦了!

作者: 不点     时间: 2005-3-10 00:00
> 在虚拟机中成功启动,但问题又来了,我发现将此image做成可引导CD,在虚拟机中却不能启动,menu.lst界面出不来.

”不能启动“ 与 ”menu.lst界面出不来“ 这说得有些含糊。究竟是”启动了但只能进入命令行“呢?还是根本就不能启动(比如死机)?

如果是前者,这就不算是太大的问题。新的 GRLDR 不再查找 boot/grub/menu.lst 而只查找根目录的menu.lst,所以如果你的软盘根目录没有 menu.lst ,则进入命令行是正确的。现在我们不需要 boot/grub/这个目录了,直接删除它吧。

---------------------------------------------------

> 还有一点,grldr方式的image用虚拟软驱vFloppy虚拟启动后,如下项目不可用了。

这个问题我目前还感到不可思议,按道理是不应当出现的。我接下来会研究一下产生这个问题的原因。但你也可以提供更进一步的信息,帮助解决这一问题。我相信,最终问题应当能够得到解决,因为我们从中似乎发现不了“必然失败”的理由。blue兄也辛苦了,非常地谢谢你。


作者: 不点     时间: 2005-3-10 00:00
你可以在命令行之下逐个敲如这些命令序列,看看究竟那个命令返回失败的信息。

你的第一个例子,应当是成功的。
title Boot from image file (hd0,0)/floppy.img
map --mem (hd0,0)/floppy.img (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)

这第二个例子,如果失败的话,可能是缺少 root 造成的。像如下这样添加上就应当好了。
title Smart Boot Manager
map --mem (hd0,0)/sbm.gz (fd0)
map --hook
chainloader (fd0)+1
rootnoverify (fd0)这第三个例子,和上述第二个一样,也是缺少 root,添加上就应当行了。
title Memtest86+
kernel (hd0,0)/memtest.gz
很抱歉关于 GRLDR 以及 GRUB4DOS 的操作方式目前缺乏详细的技术说明。的确,GRUB4DOS 和 GNU GRUB 有差异。比如以下这一点:
GRLDR 的位置是活动的,它不是像 stage2 那样完全是死定的(stage2的物理扇区位置被记录到 stage1 或者stage1.5 中)。如此的差别,就使得 GRUB4DOS在启动后不能确定它的”当前“驱动器,也就是说,其”当前“驱动器是一个无效的概念。而stage1,stage2 这种 GNU GRUB在setup 的时候就硬性确定了”当前“的 boot设备,所以,它具有”当前“这个概念。我猜想,主要是这个差别,导致了以上问题的出现,解决的办法就是在菜单中用root命令明确设定默认为”当前“的设备,或者在每个文件名之前都加上它所在的设备名,这样就不会打开文件时失败了。


作者: 不点     时间: 2005-3-10 00:00
> 酷啊!grub_for_dos-0.4.0pre4支持单分区代替整个硬盘的image镜像在内存里仿真运行了!

是的,这个功能已经具备了。但我本人还没有完全测试这个功能。我只是简单做了如下测试:

我用一个 win98 的 1.44M 软盘镜像文件 win98dos.img 来仿真硬盘 (hd0) 是成功的。

map --mem (hd0,0)/win98dos.img (hd0)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)
boot

由于软盘映象和硬盘分区的格式没有太大的差别,所以,这样也就等于测试了硬盘分区的仿真功能。似乎 memdisk 以及其它类似软件还没能提供这个功能。希望这个功能可以给大家带来方便。



作者: blue777     时间: 2005-3-10 00:00
不点兄,十分感谢你认真详细的回答,可能我表达意思不够明确:
用grldr引导的Image,做成可启动光盘后,用在虚拟机启动,机器自检后根本就无法启动了,一直黑屏.
更正一下:不仅仅是grldr引导的image经vFloppy模拟启动后上述项目不能用,就是stage1,stage2方式引导的image经vFloppy模拟启动后上述项目也不能用,而只要不用vFloppy模拟启动,不论是grldr或是stage1,stage2引导的image用在真实软驱,虚拟机软驱,以及做成可启动光盘,上述项目都可以用.我想是否和vFloppy自身模拟方式有关?vFloppy好像是用memdsk方式模拟运行image的,而grub用memdrive方式,不能嵌套重复模拟?不知我的瞎猜能否给您提供一个解决方向?谢谢!

作者: hnlyzhd     时间: 2005-3-10 00:00
不点兄,这几天好忙,今天下载了你的GRLDR可以正确引导扩展FAT分区上的GRLDR了,真的很好,并且载取其引导扇区后,可以正确加载GANDLAF的中文GRLDR,但他的不支持自动寻找各分区根目录的MENU.LST,希望你能在最终版时放出个中文的GRLDR,还有你上面提到的只找根目录的LST不太好,我认为应该在根目录上和原来那样自动找BOOT及GRUB文件夹下和MENU.LST文件...

作者: 不点     时间: 2005-3-10 00:00

> 用grldr引导的Image,做成可启动光盘后,用在虚拟机启动,机器自检后根本就无法启动了,一直黑屏.

这段话理解起来也不是太容易,可能你是想简而言之,少费笔墨。
做成可启动光盘,这应当能够启动到 GRUB 的状态。你说的问题,大概是说此时无法再用这个 GRUB来引导一个虚拟仿真的启动设备,而启动常规的非虚拟设备是正常的。如果情况是这样的,我觉得有很多种可能,比如说,你用的命令序列有什么不对的,或者BIOS 有什么问题,或者你启动的操作系统有问题,等等吧。如果 BIOS 不支持int15/eax=e820h调用,或者这个调用存在BUG,或者BIOS可启动光驱本身的软盘仿真部分也有问题,那么就无法正常使用GRUB4DOS所提供的仿真功能。不光是 grub4dos 有问题,你用 memdisk 或者其它类似软件也照样会出现同样问题的。

> 还有,grldr引导的软盘,不是直接寻找menu.lst,而是经过搜寻5,6个os_setup什么的再最终调出menu.lst.怎么和您ftp里qlinux_setup.img引导方式一样啊?qlinux_setup.img引导后立即搜寻os_setup可以理解,但grldr为何也这样呢?
最新的 pre4 已经去掉 os_setup 这些了,只留下 /menu.lst 一个了。就连 /boot/grub/menu.lst 都不再支持了。

> 更正一下我昨天的"误报军情":不仅仅是grldr引导的image经vFloppy模拟启动后上述项目不能用,就是stage1,stage2方式引导的image经vFloppy模拟启动后上述项目也不能用,而只要不用vFloppy模拟启动,不论是grldr或是stage1,stage2引导的image用在真实软驱,虚拟机软驱,以及做成可启动光盘,上述项目都可以用.我想是否和vFloppy自身模拟方式有关?vFloppy好像是用memdsk方式模拟运行image的,而grub用memdrive方式,不能嵌套重复模拟?不知我的瞎猜能否给您提供一个解决方向?谢谢!
这么说来问题就在 vFloppy 本身了。vFloppy 不是开放源码的软件,外界恐怕不容易把握它的一些深层的东西吧。所以我觉得应当向 vFloppy 的开发者询问,才比较容易获得一个满意的答复。我很早都知道有 vFloppy 这个软件,但我本人并没有用过 vFloppy,因而也不能给您提供点什么帮助。谢谢您提供的这些信息,让我对此能够有所了解。


作者: blue777     时间: 2005-3-10 00:00
"用grldr引导的Image,做成可启动光盘后,用在虚拟机启动,机器自检后根本就无法启动了,一直黑屏."
就是说用您介绍的方法将grldr安装在软盘上,保存为Image,此Image可以在真实软驱中,虚拟机软驱中正常启动;但如果将此Image作为引导文件做成启动光盘,此光盘却根本不能启动.
但是,用root (fd0),setup (fd0)方式,将/boot/grub/stage1,stage2安装在软盘上,保存为Image,此Image则可以用在所有场合.此Image作为引导文件做成启动光盘完全可以启动.
我的疑问是,为何用grldr引导方式的Image,作为引导文件做成启动光盘无法启动?

作者: 不点     时间: 2005-3-10 00:00
> 载取其引导扇区后,可以正确加载GANDLAF的中文GRLDR,但他的不支持自动寻找各分区根目录的MENU.LST,希望你能在最终版时放出个中文的GRLDR, .......

我不打算做中文版的,至少目前没有时间。我得把 linux 的分区给彻底支持了才行,我认为这个才要紧。等我们支持了 linux的分区之后,我们也就准备开始淘汰老式的 GNU GRUB 的过程了。我们的游动式查找方法,比 GNU GRUB的固定式查找方法要优越得多,也强健得多,理应逐步得到大家的认同。这话我本来不想说的,但是这里确实有不少人关心中文化,而对 linux不很关心,大家可能偏重于希望有个中文化的 GRUB版本,因此我也就把我的打算说出来了,我个人认为,中文化可以以后再考虑也不迟,现在GRLDR(安装到MBR)对linux的支持应当是迫切的。虽然linux的各种文件系统都有源代码,但是,支持它们并非容易的事情。

另外我认为,Gandalf 不可能彻底离开 GRUB 的开发,他迟早还会发布新版本的。诸位如果能代替他发布,也是可以的呀,为什么不可以呢?世界上的事情,只有想不到,没有做不到。

> 还有你上面提到的只找根目录的LST不太好,我认为应该在根目录上和原来那样自动找BOOT及GRUB文件夹下和MENU.LST文件...

是的,现在只支持根目录了。短期看,这会存在兼容性问题,但是长期看,这是值得的。微软的习惯是把所有与系统启动有关的重要东西都放在根目录,我比较赞成遵从微软这个习惯。当初 GNU GRUB 把启动目录设定在 /boot/grub/,我认为是不太恰当的。也许他们这么做也有道理,那便是,那些用来支持各种文件系统的 stage1_5 文件竟然不下于十个,如果把这许多的stages 文件都放在根目录,那也不很雅观,所以开发者开辟了一个目录 boot 用来专门存放这些文件。

我们现在不同了,那些 stages 文件,一个也用不上,全部要废弃,我们只要一个 GRLDR,外加一个 menu.lst,全部都解决了。不为别的,就为美观,也得废弃掉 boot 目录。


作者: blue777     时间: 2005-3-10 00:00
实在不好意思,我前天用的grldr不是最新pre4版的,我今天用最新版安装到软盘,启动先出来如下界面:
find /menu.lst
enter commandline mode
5秒倒计时后就出来了menu.lst界面.我的误报,给您添麻烦了.
但是,还有个问题依旧没解决,就是将该软盘保存为image,将此image作为引导文件做成启动光盘,在虚拟机中测试,依然不能启动,除了机器自检,什么界面都出不来.
如果老方法制作的含stage1,stage2的image,做成启动光盘则可以顺利启动,调出menu.lst.

作者: 不点     时间: 2005-3-10 00:00

> 我的疑问是,为何用grldr引导的Image,做成可启动光盘后无法启动?

今天有别的事情,这个问题估计也不容易马上能有个解决,明天再谈。

> 还有我的确是用pre4的最新3月9日的grldr安装在软盘上的,启动后在menu.lst出来之前还是出现了一系列 os_setup 等,最后才调出menu.lst,因此很不解,请教原因.
这不会吧,一定是你搞错了。我已经试验过了很多台机器,都是只有 find /menu.lst 出现了。


作者: blue777     时间: 2005-3-11 00:00
实在不好意思,我前天用的grldr不是最新pre4版的,我今天用最新版安装到软盘,启动先出来如下界面:
find /menu.lst
enter commandline mode
5秒倒计时后就出来了menu.lst界面.我的误报,给您添麻烦了.
但是,还有个问题依旧没解决,就是将该软盘保存为image,将此image作为引导文件做成启动光盘,在虚拟机中测试,依然不能启动,除了机器自检,什么界面都出不来.
如果老方法制作的含stage1,stage2的image,做成启动光盘则可以顺利启动.

作者: 不点     时间: 2005-3-11 00:00
我又检查了一遍 GRLDR 第四扇区的代码,未发现任何错误。

我制作了一个用 grldr 来引导的光盘,在虚拟机和真实机中都能成功启动并进入通常的 menu 界面。我采用的虚拟机是 qemu软件。由此看来,你所遇到的错误估计还是由于你自己的什么失误造成的。如果你能确认绝对不是由于你自己的失误造成的,那还可能有以下一些原因:

1。你所用的虚拟机不能完全遵守 BIOS 启动规范(这是多年以来早已被广泛认可的工业标准),比如在从 CDROM 引导的时候,不能正确地将 DL=0 传递给光盘中软盘映象的引导代码。这也就是说,虚拟机的BIOS存在BUG。

2。你所用的虚拟机不能完全遵守 BIOS 启动规范(这是多年以来早已被广泛认可的工业标准),比如在从 CDROM 引导的时候,不能正确地将软盘规格数据(C/H/S) 传递给光盘中软盘映象的引导代码,导致该引导代码在调用 int13时出现误读或失败。这也就是说,虚拟机的BIOS存在BUG。

3。你的光盘制作工具,或者ISO文件制作工具含有未知的 (或者随机的) BUG,比如将软盘映象的位置搞错,从而制作出了一个无效的、不可引导的光盘。

大致情况应当就是这样的,除了上述这些情况以外,应当不会再有其它的可能了。



作者: blue777     时间: 2005-3-11 00:00
不点兄,老是打扰麻烦你,真是不好意思,我是在虚拟机VPC5.2版下测试的,光盘制作工具就是用UltraISO,您提到的三种可能都不存在.这样吧,我将我做的grldr.img上传上来,该镜像用的是您ftp上3月9日最新的grldr制作的,用在软驱上(真实的,虚拟的,虚拟机的)都可正常启动,但做成启动光盘就不能启动了.麻烦您试验下看看究竟是什么原因?打开附件

作者: eleee     时间: 2005-3-12 00:00
我使用的grub_for_dos-0.4.0pre4.tar.gz这个包,拷贝到虚拟机的硬盘上执行
ROOT (FD0)
SETUP (FD0)
将GRUB安装到软盘,然后我把软盘上的所有文件都删除,只保留了GRLDR,作了IMA镜像成功在虚拟机上引导,作了ISO也成功在虚拟机上引导。不过blue所说的问题确实很奇怪,我用他提供的IMG文件也可以从软盘引导,但是做成ISO也不能从光盘引导。
以上试验都在VPC2004(VIRTUAL PC 2004)下进行。

作者: eleee     时间: 2005-3-12 00:00
有一点我觉得奇怪,我把grldr删除掉(这个时候看上去就像一张空白磁盘),完全依靠软盘的引导信息也可以引导到grub的菜单界面。
但是blue所描述的情况我也遇到了,换句话说不是每次都能成功的引导,我这里更严重,有时候连做成的软盘IMA映像也无法引导(这个时候软盘也无法引导,只出现GRUB这4个字符闪现)。
目前正在进一步测试中。
又试了一次,成功了,步骤如下:
在A:建立BOOT\GRUB目录,拷贝STAGE1和STAGE2到这个目录下
从C:运行GRUB.EXE,执行安装到软盘的命令
然后删除掉BOOT目录,作IMA引导成功,作ISO引导成功。
希望能有更多的朋友来测试。
最后我想请教一下不点和blue,能否从光盘上#直接#运行GRUB,而不是把它做成引导软盘IMG,然后将它集成到光盘上,如果有的话能否告知方法和相关的下载,谢谢!我知道通过使用BootLoader for Grub或者EASYBOOT可以实现。

作者: 不点     时间: 2005-3-12 00:00
>我是在虚拟机VPC5.2版下测试的,光盘制作工具就是用UltraISO,您提到的三种可能都不存在.这样吧,我将我做的grldr.img上传上来,该镜像用的是您ftp上3月9日最新的grldr制作的,用在软驱上(真实的,虚拟的,虚拟机的)都可正常启动,但做成启动光盘就不能启动了.麻烦您试验下看看究竟是什么原因?

我刚刚用你提供的这个 grldr.img 制作了光盘,用 qemu 启动,正常显示其中的 menu , 用真实机启动,也是同样正常的。这就基本可以肯定是你们所用的虚拟机太次了。要不,你们也用真实机测试,看看是否正常呢?或者你们换一种虚拟机测试,看看如何?




作者: 不点     时间: 2005-3-12 00:00
> 我使用的grub_for_dos-0.4.0pre4.tar.gz这个包,拷贝到虚拟机的硬盘上执行
> ROOT (FD0)
> SETUP (FD0)
> 将GRUB安装到软盘,然后我把软盘上的所有文件都删除,只保留了GRLDR,.......

看到这里不用再看下去了。这个做法是错误的。你的安装是采用老式的 GNU GRUB 的方式(root, setup 之类的),而你却想引导GRLDR,这是不可能的。你必须按照 GRLDR 的安装方式(自己找相关说明,比如 http://grub.linuxeden.com/),才可以引导 GRLDR,否则,你只能引导旧式的 stage2 文件而已。




作者: 不点     时间: 2005-3-12 00:00
> 又试了一次,成功了,步骤如下:
> 在A:建立BOOT\GRUB目录,拷贝STAGE1和STAGE2到这个目录下
> 从C:运行GRUB.EXE,执行安装到软盘的命令
> 然后删除掉BOOT目录,作IMA引导成功,作ISO引导成功。

你把含有 stage2 的目录删掉,居然也能启动到 GRUB,这正是原来旧式的 GNU GRUB安装方式的滑稽之处,这是不安全的。一旦你拷贝文件覆盖掉 stage2 文件所占据的物理空间,你的引导立即宣告失败。因此,虽然你删掉了 boot目录,但是,你并不可以利用这些空间来存放其它文件。

> 最后我想请教一下不点和blue,能否从光盘上#直接#运行GRUB,而不是把它做成引导软盘IMG,然后将它集成到光盘上,如果有的话能否告知方法和相关的下载,谢谢!我知道通过使用BootLoader for Grub或者EASYBOOT可以实现。

“直接运行 GRUB”,好像有歧义吧。怎么才叫做直接呢?如果你是指 no-emulation mode 的光盘启动标准,那么在搜索引擎中搜stage2_eltorito 就可以知道将 GRUB 直接安装到光盘的方法的。我刚刚也上载了 pre4 的 stage2_eltorito文件到 FTP 空间:

ftp://ftp.linuxeden.com/tinybit/stage2_eltorito

你在读完你搜索到的相关文章之后,可以用这个文件来制作你的GRUB可引导光盘。



作者: hnlyzhd     时间: 2005-3-12 00:00
关于做GRUB引导的光盘请到下面下载http://bbs.wuyou.com/cgi-bin/topic.cgi?forum=34&topic=7376然后 把这个文件做为光盘引导文件,用ULTRAISO加载,或用EZB调用都可以,只是要放一个STAGE2文件在光盘的BOOT文件夹中,要不启动文件找不到STAGE2,就无法启动GRUB了,还有就是你的MENU.LST中的文件路径(cd)/后面的所有路径全部要大写,OK?

作者: Esme     时间: 2005-3-20 00:00
现在的pre4版本好繁琐啊,开机时如果不手动按键的话,非要等5秒boot mbr,再等5秒find grldr,0.4.0pre和以前的就不用,说实话mbr功能对我的电脑来说是鸡肋,因为我是单一硬盘单一分区我看过grldr的代码,呵呵,本人很菜,看不懂,但为什么写在boot previous MBR前面的,可以设置menu.lst的默认路径的代码无论怎么设置都得不到执行呢,还有什么办法或者怎么修改才能不用等那两个5秒?通过修改哪段代码可以让这两段命令的timeout由5变成0?

作者: lilo1024     时间: 2005-3-20 00:00
grub4dos相对于软盘来说还是太大了,改用syslinux吧,配合memdisk,什么dos下的exe/sys压缩工具都不需要了,因为memdisk支持zip、gz格式。我自己做的启动软盘就非常简洁,根目录下就只ldlinux.sys、memdisk、syslinux.cfg、dos.zip、sbm.gz、cia.gz六个文件,其中三个是镜像。当然,syslinux的功能少了点,但用在软盘上正合适。至于grub4dos,我看还是用在硬盘、光盘或者优盘上比较好。

作者: 不点     时间: 2005-3-20 00:00
Esme:

pre4是测试用的,在正式版时,默认不再优先执行 previous MBR 了。现在如果你把 GRLDR开头的第三个字节 00 改成十六进制的 80,那么就禁止了该功能,正式版也将这么做。不提供修改 timeout值的方法,要想修改的话,只有自己直接修改源程序了。

今后由我发布的版本将不再查找 boot/grub/ 之下的 menu 了,而只查找根目录下的 menu.lst 文件。所以,以前在boot/grub/ 目录的菜单,都会失效的。之所以现在就这么改,是因为我发现 NTFS模块存在很大的问题,它有时不能正确打开子目录下的文件,而可以正常打开根目录下的文件。顺便说,大家如果要仿真运行某个 img文件,注意要把该文件放在 NTFS 的根目录,否则,可能会在打开它时失败,或者虽然能打开,但得到的文件内容是错的。



作者: blue777     时间: 2005-3-20 00:00
dear tinybit,wish you release the new version of grldr as soon as posible! <img src="images/smilies/face-laugh.png" align="absmiddle" border="0">

作者: Esme     时间: 2005-3-20 00:00
谢谢!我将00改为80后确实不再执行previous MBR了但是我又发现了新问题,似乎pre4和ntfsdos pro在中断上存在冲突,我用虚拟的软驱img正常启动后执行ntfsdos pro,显示成功发现ntfs盘,盘符被设为c。可是接下来无论我再执行什么命令(在虚拟的a盘下),甚至dir,cd..这样普通的命令,都会死机。pre版本则没有这个问题,一切正常

作者: blue777     时间: 2005-3-21 00:00
ntfs4dos is much better than ntfs pro

作者: 不点     时间: 2005-3-21 00:00
大家不要着急,pre4没有大的问题。我本来是打算把它作为正式版发布的。不过目前看来,还有一些小的地方需要作出补充或完善。其一是刚才所说的previous MBR, 默认将不再优先执行(而是在查找GRLDR失败后才执行);其二是以前的版本都漏掉了 stage2_eltorito文件,这是用来制作 no-emulation 模式的可引导光盘的,下一个发布将包括它。

&gt; 但是我又发现了新问题,似乎pre4和ntfsdos pro在中断上存在冲突,
&gt; 我用虚拟的软驱img正常启动后执行ntfsdospro,显示成功发现ntfs盘,
&gt; 盘符被设为c。可是接下来无论我再执行什么命令(在虚拟的a盘下),
&gt; 甚至dir,cd..这样普通的命令,都会死机。pre版本则没有这个问题,一切正常

这我就不太清楚了。pre4 比 pre在磁盘仿真代码方面,做了很多改进,去除了很多错误,目前我觉得在仿真代码部分是很强健的,不应当再有什么大大小小的问题了。注意我们的 --mem都是利用 int15 来处理内存的各种操作,例如,确定扩展内存的大小,在常规内存和扩展内存之间移动内存块等等。如果某个软件有BUG,当然它有可能在新的版本下失败。我编写这段仿真程序时,将业界规范都已经看过了,我搜集到的这些规范在http://grub.linuxeden.com/ 上都能够找到。

不过问题既然出现了,我们还是应当尽力去找到原因的,如果能够找到的话。在 pre4 之前还发布了 pre2 和 pre3,请你进一步看看它们有没有问题,把测试结果报告一下,我好据以判断出产生该问题的根本原因,先谢谢了。



作者: Esme     时间: 2005-3-21 00:00
呵呵,我不知道去哪能下到pre2和pre3,甚至pre,因为下了pre4就把之前的删掉了新dos那只有最新的,论坛上那个ftp打不开

作者: 不点     时间: 2005-3-21 00:00
这个 FTP 可以打开,如果打不开,等半小时之后再试:
ftp://ftp.linuxeden.com/tinybit/



作者: blue777     时间: 2005-3-22 00:00
不点兄,如果C:盘装的98,D:盘装的XP,将grldr,menu.lst放到C:盘并在boot.ini最后一行添加c:\grldr=xxxx,但选择find /menu.lst 后自动重起.难道必须要求2000/XP/2003装在C:盘?

作者: Esme     时间: 2005-3-22 00:00
不点兄,你给的ftp我试过很多次,但总是说无法连接或无权访问,会不会跟我在国外有关系?

作者: 不点     时间: 2005-3-22 00:00
Esme:

全部四个版本,我已经用 Email 发送给你,请注意查收。

作者: 不点     时间: 2005-3-22 00:00
blue777:

你说的恐怕是很大的 BUG 吧?你能否进一步更详细地测试一段时间,考虑各种可能性,然后确定一下 BUG 的原因?如果你现在就有判断了,或者有猜测,请写出来。



作者: blue777     时间: 2005-3-22 00:00
好的,上述情况是我数位用户反应的,我再亲自装个98和XP测试.另外,grub从哪个版本开始取消了RUN命令?因为我要在软盘启动盘加上个启动ISO项.title Boot from iso file (hd0,0)/iso_file.iso
run /ieldr软盘带了ieldr和isoemu.ini,将isoemu.ini和iso_file.iso放在(hd0,0),且编辑isoemu iso_file.iso即可从ISO引导了.但pre4甚至前至grub 0.90版都已经没RUN命令了.请问如何处理?

作者: 不点     时间: 2005-3-22 00:00
既然不是你遇到的问题,那么我就猜测可能是一种误报,因为 pre4 出现这样的问题,应该说是没有什么可能性的。用户很可能混淆了 pre4 和以前的其它版本,因为它们都叫做 GRLDR,并且更名以后就无效。

你自己可能也搞错了,因为 RUN 命令是 GANDALF 增加的,只有他发布的版本才有 RUN 命令。由我发布的版本没有 RUN 命令,也没有 ISO、CDROM 的支持。



作者: blue777     时间: 2005-3-22 00:00
我不知道你发布的没有RUN命令.因为Grub 命令索引http://grub4dos.sourceforge.net/grubcmd_ch.htm上有RUN命令.scdrom是ganfalf编译进去的,这我知道.我也一直用的是cd.bs+BCDL或Smart Boot Manager来引导CD.你能否增加个功能,在command line下能调用grldr,ieldr等?

作者: Esme     时间: 2005-3-22 00:00
不点兄百忙中还发来软件给我,怎么是一个谢字了得我测试过所有的版本了,结果很乐观,所有版本都跟ntfspro没有冲突,所以与ntfspro冲突也属误报,耽误大家时间了。我检查了一下以前有冲突的原因,发现问题出在我用的pre4版本的grldr上,因为我打不开ftp,所以从blue777在第四页最下面提供的压缩包中提取了grldr,那个却被他依照他的功用改过了,部分代码改得不得体,所以有bug存在。不过由此却发现了另一个问题,就是ftp或新dos的grub下载页都需要健全,最好能够及时全面的提供各个版本的文件另外提点建议给blue777,我觉得不一定非要在grub 4 dos中植入run命令以运行ieldr,也可以考虑启动时将ieldr与grldr作为平级处理,虽然启动过程看起来多了一步的说

作者: Esme     时间: 2005-3-22 00:00
再次更正,或许blue777没有改过那个grldr,我同时研究了一下他的img中的io.sys发现编码完全不对。另外以前也曾看过一些关于UltroISO压缩失真的文章,或许问题出在img文件本身,建议你用UltroISO重新压缩一次img,或许就可以完成光盘启动了,仅仅是猜测,呵呵

作者: blue777     时间: 2005-3-22 00:00
那个img里的grldr我根本没改任何代码,我也没那个水平.我只是照tinybit介绍的安装方法,装在了软盘里而已.但是迄今为止仍不能用做启动光盘.因为不能老是打扰不点兄,所以我就放弃了在软盘里用grldr引导,仍旧用以前的stage1,stage2来引导.(命苦!)我只做软盘启动盘,所以你所说的在boot.ini里grldr和ieldr平行引导对我没任何意义.希望不点兄帮忙!



作者: blue777     时间: 2005-3-22 00:00
io.sys的55AA被修改了,为的是解除硬盘逻辑锁限制.和不能做启动光盘没任何关系.
下载最新pre4的,装到软盘有两种途径:
1.用stage1,stage2:root (fd0),setup (fd0),得到的软盘镜像假设称为a.img
2.用grldr,方法省略,得到的软盘镜像假设称为b.img
经虚拟机测试,虚拟软驱vFloppy测试,和写成真实软盘在真实软驱中测试,得出结论:
a.img和b.img都可以引导.

现在用a.img作为可引导文件制作个测试用的启动光盘,假设称为a.iso
用b.img作为可引导文件制作个测试用的启动光盘,假设称为b.iso
经虚拟机测试和刻成真实光盘后得出结论:
a.iso可以引导,b.iso不可以引导.
请能解决此问题的将可引导的b.iso上传上来,谢谢!

作者: 不点     时间: 2005-3-22 00:00
blue777:

问题出现之后,应当查明原因才可以收场。如果不查明原因就罢休了,恐怕你从此很难有所提高。

你提到的 GRLDR ISO 问题,其实已经进行的差不多了,快要到达“得出结论”的时候了,正在这时,你放弃了,这就叫做前功尽弃。

你给我的 GRLDR.IMG 文件,是 1.44M 的普通软盘映象,我用它直接替换掉正版 win98 的安装光盘上的 1.44M的引导映象,结果证明是成功可以引导 GRUB的。而你自己用xxx软件制作的光盘,却不能引导。你由此能得出什么结论呢?你大概是得出这么一个结论,那就是 GRLDR 制作的光盘有毛病,它不如stage1, stage2 制作的好。但是你却没有问,为什么别人用 GRLDR 制作的就能引导呢?而且就是用你自己提供的 GRLDR.img制作的呀。

不能说你得出的结论完全没有道理,但是,你似乎还能够得出其它结论啊,这就是所谓的“多解性”,x 的平方 = 1, 有两个解, x=1 和 x=-1, 这就是同一个问题的两种不同的解。

试想,如果你用的ISO制作软件,都很可靠吗?可靠到什么程度?是不是绝对不会出现一个错误?如果你的软件确实是这样的,你已经完全排除它出错的可能性了。但问题是,你无法证明它没错,除非你按照光盘启动规范去检验它生成的 ISO文件是否完全正确。而你却又没有做这个检验。总而言之,你不想在这里多花费一些工夫,所以,你选择了放弃 GRLDR方法制作的光盘,同时也免去了对该问题进一步的思考,或者说,放弃了一个很好的可以提高的机会。弄清一个问题,必然会提高,你提高,我也提高,甚至大家都可能提高;如果继续保持含混状态,那你也就在该问题上原地踏步,我也原地踏步,大家可能也都得原地踏步。

当然了,我说的是我对待问题的观点或者习惯罢了,没有指责兄弟们的意思。咱们是就道理来谈道理,这里本来就是论坛嘛,要谈的都是深层的技术,而不是一般的聊天室。

&gt; 你能否增加个功能,在command line下能调用grldr,ieldr等?

引导 grldr,可以这样:

chainloader (hd?,?)/grldr

因此我猜测,引导 IELDR,也可以类似地:

chainloader (hd?,?)/ieldr

由于我并未研究过 IELDR 的结构,所以上述只是猜测,不一定能成功。谁知道 IELDR的结构,麻烦在这里详细解释一下,我相信,知道它的结构之后,就可以用一个合适的 chainloader 命令行参数来引导它。pre4 的chainloader 有此功能,以前版本的 chainloader 无此功能。大家也可以自己研究一下新的 chainloader 命令,用help chainloader 命令就可以看简短的英文说明。很遗憾现在没有足够的文档来说这些细节。


作者: hnlyzhd     时间: 2005-3-23 00:00
in x86 RealMod 代码运行后, 首先从 0x0000:0x7c00 把自身拷贝到 0x0000:0x8200 处运行, 接着, 再次进行这样的操作, 目的地 0x0000:0x0800, 此处, 就是分区管理程序所运行的内存空间了. 现在, 我们将把系统的诸分区进行枚举, 找到一个 FAT32/NTFS 分区, 即开始寻找, 配置文件(isoemu.ini), 找到了, 就开始分析; 否则找寻下一个分区, 直到所有分区被分析, 然后把用户推到内置的 Shell 里. 当找到配置文件里的 isoemu 行后, 即开始在该分区的根目录下, 寻找指定的 iso 文件, 并获取它的首簇号. 一旦失败, 入 Shell/. 当我们找到了这个文件后, 即开始安装我们的 mini-fs 的新 INT13h 中断, 然后,用 iso 文件的首簇号初始化它. 接下来, 等待用户的指令, 并转入从虚拟的光驱上启动系统. 如果, 所指定的 iso 文件, 不是有效的, 或不可启动的, 那么, 就转 shell. 如果可启动, 那么, 载入引导扇区, 并把系统的控制权转交给它- 搞定! 呵呵.

作者: Esme     时间: 2005-3-23 00:00
再次更正测试结果
首先道歉,因为上次进行4个版本的测试时快要上课了,时间仓促,又不愿用虚拟机测试,所以动了点歪脑筋,以致结果失准。过程如下
将boot.ini内加入:
c:\grldr=Pre
c:\grldr02=Pre2
c:\grldr03=Pre3
c:\grldr04=Pre4
然后开机逐一测试,结果是四个版本与ntfspro都无冲突可是我放学回来后再测发现,其实在boot.ini加入的后三行是不可靠的,例如选pre2开机,只是经过grldr02文件进行初始,然后继续执行的仍是grldr,查看grldr代码发现这是必然的所以我只好轮流启动各版本grldr,这次发现了问题
仍然只有pre版本可以正常运行ntfs4dos pro
大致结果如下
pre正常,pre2和pre4可以执行ntfs4dos pro,但执行后任意命令死机,pre3执行ntfs4dos pro立即死机
我检查了一下内存,发现pre3严重干扰其它程序调用HMA和XMS内存,甚至DOS无法将内核调入HMA
由此我猜想版本pre2/pre3/pre4在内存处理上有bug

作者: Esme     时间: 2005-3-23 00:00
blue777,如果你只研究软盘启动,ieldr对你来说好像用不上吧?如果光盘映像iso文件可以小到装在软盘里,那它也没什么作用,那还不如启动软盘img,而启动实模式光盘grub可以胜任。如果你是想让ieldr调用硬盘中的iso,那这项功能也没有通用性,每个人硬盘上的文件不一样嘛

作者: blue777     时间: 2005-3-23 00:00
不点兄,我没有丝毫埋怨人的意思,只是觉得颇有点无奈,语气用得稍有不逊,在此向你道歉!不是我不坚持,是我数次努力都不成功,又不能老是在这个问题上纠缠你,Esme旧话重提我才发了那段可能让你不快的话的.你说的"我用它直接替换掉正版 win98 的安装光盘上的 1.44M的引导映象"是什么意思?是直接将win98.iso里的引导文件用其替换还是其它什么意思?我不清楚.这样吧,麻烦你把我那个grldr.img直接做成grldr.iso,上传上来.我仔细研究下究竟原因出在哪里,还请您不计我一时鲁莽之言,谢谢!

作者: blue777     时间: 2005-3-23 00:00
以下是引用Esme在2005-3-23 11:41:07的发言:
blue777,如果你只研究软盘启动,ieldr对你来说好像用不上吧?如果光盘映像iso文件可以小到装在软盘里,那它也没什么作用,那还不如启动软盘img,而启动实模式光盘grub可以胜任。如果你是想让ieldr调用硬盘中的iso,那这项功能也没有通用性,每个人硬盘上的文件不一样嘛




你怎么不明白我的意思呢?
我需要做个grub引导的软盘启动盘,在menu.lst里加入下述item:
title Boot from iso file (hd0,0)/iso_file.iso
chainloader (fd0)/ieldr
并且我软盘提供了ieldr,假设我要重装系统,需要用d:\folder\xp.iso,虽然我可以用:
shsucdhd /f:d:\folder\xp.iso
shsucdx /d:shsu-cdh
来在dos下加载iso镜像,然后安装,但不能重启.(尽管可以将i386\拷到硬盘上装)
现在我只要先到dos下,将xp.iso重命名iso_file.iso拷贝至c:\.
再用 echo isomeu iso_file.iso&gt;isoemu.ini 来新建个isoemu.ini,并且也将其拷贝至c:\.
这样,重启后,再次来到menu.lst界面选那个item,不就直接从c:\iso_file.iso来引导了吗?
我提的每个问题都是有目的性的,而非妄自菲薄.

作者: Esme     时间: 2005-3-23 00:00
别误会,大家不是在这讨论嘛,我从来都不觉得你的问题妄自菲薄阿,相反你对启动盘的专一投入让我很佩服,我正想研究你的潘多拉盒子,可是你选的网络硬盘实在是......不支持断点续传,还超慢,还总断,我用net transport 挂网上两天了都没下下来,难道跟我在国外有关系?你所说的iso启动我会再想想办法的,还有你遇到的别的难题也是。别急,大家一起想办法,路总会有的

作者: Esme     时间: 2005-3-23 00:00
关于启动盘制作我还提点建议,我之所以执著于ntfs4dos pro正是因为它可以对ntfs进行完全操作,虽然体积大点,但两张盘也装下了。而目前的启动盘带的ntfs4dos 都是只能读的那种,可是你想想xp要是出问题了,比如ntoskrnl.exe被误删或中毒,这种盘也救不了阿,而有了ntfs4dos pro就可以手动将备份复原。ERD Commander也有很多不尽人意的地方,所以一直喜欢用ntfs4dos pro。如果msdos能够植入对ntfs的辨识该多好啊

作者: 不点     时间: 2005-3-23 00:00
hnlyzhd:

“搞定”,是说什么搞定了?是 chainloader (hd....)/ieldr 这样成功了吗?还是别的什么意思呢?谢谢你提供的详细描述,按照你的描述,似乎 chainloader (hd....)/ieldr 这种办法差不多是应当成功了,无需再增加别的命令行参数了。

Esme:

谢谢你的详细报告。我再一次看了这些版本中 asm.S 中的源代码,发现最早的、最粗糙的 pre 版本,是歪打正招。这个粗糙的版本,居然适合你的那个 ntfs4dos pro 的胃口,实在是叫人不知是喜还是忧。

我当时写出这第一个预发布版,在读取扩展内存中的虚拟扇区数据时,用的 int15 这条指令。后来的版本做了改进,有时使用 int15指令,而有时使用 pushf; call far 直接调用 BIOS 中最原始的 int15 入口地址。就是说,在实模式时,要调用最原始的BIOS 程序,而在保护模式时,由于 BIOS 已经不再有效,此时应当调用 int15 指令。

你的 ntfs4dos pro 不遵从 int15/EAX=e820h 的规范,它擅自挪动由 int15/EAX=e820h 所保留的不许随便使用的系统内存空间。如果我们把程序改成适应 ntfs4dos pro 的,那么其它大量的程序就可能要失败了。所以,我们还是舍弃了它吧,大家有什么意见吗?或许有人会说,再增加一个map 命令行参数控制这一行为,让它可以适应 ntfs4dospro 的要求,然而问题是,我们的参数空间都用光了,为了这么一个不遵守规范的程序,我们不适合再做大的调整了。我们的程序对于微软的 DOS启动软盘,甚至对于win98,都是可以良好配合的,其它第三方的不规范程序,实在没有照顾的必要了。你可以找一个替代品来用,或者等着让该软件升级,改掉不规范的毛病,然后再用它。



作者: 不点     时间: 2005-3-23 00:00
blue777:

大家都是为技术而来,也不必说抱歉之类的话。不为技术,谁来这里干什么呀。为技术的人,他一般是不会在乎谁说的太难以接受了,等等这类,更何况,你根本就没错呀。其实我还怕什么话说错了,让你接受不了呢。我说话很直,容易让人误会,但我也仅仅是谈想法,有想法不说出来,那不就太难受了。我从来不指责别人,所以,千万别把我的话当成是指责。

ftp://ftp.linuxeden.com/tinybit/win98_head.iso

注意,这不是一个完整的 ISO 文件,它只是 win98 安装光盘最开头的 84 个扇区。在它后面,紧接着1.44M引导软盘的映象。所以,假定你的 1.44M 可启动软盘的映象是 grldr.img,你就可以这么生成你的可引导光盘,注意,这没有实际用处,只是用来测试光盘是否可以正常引导的:

copy /b win98_head.iso + grldr.img grldr.iso

DOS 下的这个带有 /B 参数的拷贝命令,相信都会用吧?它是用来拼接两个文件的。生成的文件是 grldr.iso。这个就可以引导你的 GRUB。



作者: blue777     时间: 2005-3-23 00:00
以下是引用Esme在2005-3-23 13:20:33的发言:

关于启动盘制作我还提点建议,我之所以执著于ntfs4dos pro正是因为它可以对ntfs进行完全操作,虽然体积大点,但两张盘也装下了。而目前的启动盘带的ntfs4dos 都是只能读的那种,可是你想想xp要是出问题了,比如ntoskrnl.exe被误删或中毒,这种盘也救不了阿,而有了ntfs4dos pro就可以手动将备份复原。ERD Commander也有很多不尽人意的地方,所以一直喜欢用ntfs4dos pro。如果msdos能够植入对ntfs的辨识该多好啊


谁说我启动盘里ntfs4dos只能读不能写?不仅能在dos下完全读写NTFS分区,而且可以在win9x/me的dos窗口下完全读写ntfs分区.体积仅91KB,内存占用要118KB.你当它是ntfsdos pro的只读版ntfsdos啊?

作者: hnlyzhd     时间: 2005-3-23 00:00
TO 不点兄:我上面只是说了一下IELDR的原理,我最近太慢还没有测试CHAINLOADER命令,大家如果有兴趣请到我的网络盘下载最新的ISOEMU的引导程序,新版的IELDR和DOS版的IELDR.EXE,测试能否启动之。。。。

作者: blue777     时间: 2005-3-23 00:00
不点兄,谢谢你的答复.我之所以提出那个问题,是因为我要做一个集大成的1.44M启动镜像文件.可以用在各种场合.当然也包括用做启动光盘的引导文件.但是恰恰这个实现不了,所以我才对此深究不放.你的意思是,我做个光盘demo.iso,最后要加载可引导文件使其成为可启动光盘时,不会用下面方法吧: copy /b demo.iso + grldr.img grldr.iso你有解决办法吗?因为stage.img是怎么都可以做成可启动光盘的,为何单单grldr.img就不行呢?我觉得不能一味追究制作ISO的工具的过错,也要在grldr.img上找找原因.因为grldr是您做的,我就只好讨教你了.

作者: blue777     时间: 2005-3-23 00:00
hnlyzhd,我知道你是无优光盘启动论坛斑竹.你提供的新版我试了,对于在dos命令行下使用的ieldr.exe我不知有何实际意义?试问你都已经启动完毕到dos命令行下了,难道通过ieldr.exe还能够让电脑再次从iso文件启动?如果我理解错了,敬请批评指正!

作者: blue777     时间: 2005-3-23 00:00
哈哈!还是有振奋人心的消息啊!我用不点兄说的chainloader (fd0)/ieldr成功引导了软盘里的ieldr,感谢tinybit!感谢Gandalf!这下用张软盘就可以让电脑从硬盘里的可引导ISO文件启动了!(方法见上面92楼)这下我做的1.44M可启动镜像又重重加上一笔了!说实话,以前我对Gandalf做的本土化grub0.95丝毫不感兴趣!因为放在软盘太大!包括编译进去的scdrom也远不如用cd.bs+bcdl好用(可以让电脑从usb光驱启动),所以我对Gandalf无丝毫感激或敬意之情,但他的ieldr还是非常有用的!可以说是一个革命性的创新!在此,请允许我再次向不点兄和Gandalf表示最崇高的敬意!!!

作者: hnlyzhd     时间: 2005-3-23 00:00
TO BLUE777老兄:正如你所想的,在DOS下运行IELDR.EXE可以自动寻找硬盘上的ISOEMU.INI信息,然后启动硬盘上的ISO文件,就像在DOS下运行GRUB.EXE启动GRUB一样,不过在DOS下运行IELDR.EXE要求必须是纯DOS

作者: blue777     时间: 2005-3-23 00:00
你说的纯dos是最好就一个内核io.sys和命令解释器command.com的最简化dos?(MS-DOS 7.10不需要msdos.sys)
而且这样也限制了我无法采用诸如pc-dos,rom-dos,dr-dos等更多选择.(grub和ieldr无法在那些dos下用)
所以还是在menu.lst调用ieldr的好,要不还得在config.sys里多写个puer real mode.

作者: GOTOmsdos     时间: 2005-3-23 00:00
不点兄,我有个疑问:
你在很多地方讲了“硬盘景象”可仿真一个硬盘而“分区景象”就不行,尚不支持等等。。
这两者有何不同?主引导,分区景象也有主引导的。分区好像只是整个硬盘的一个组成部分,但实际上,在系统内核理,他就是一个硬盘呢。 因为每个分区都有他的主引导(最前面的63个扇区的物理的第一扇区,内有分区表,记录了下一分区(也可以说成下一硬盘)的位置等等,各个分区都有的,形成分区表链。。。),
两者唯一的区别是前者可引导,后者不可引导,但是在用WINIMAGE等等景象工具作景象时,就会把主引导和系统引导代码加进去的,(作软盘景象就加系统引导,作硬盘景象就都加进去)
当用这些景象启动时,系统就认为他是一个硬盘(其中有可引导的分区)
以下引用老兄的:&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;&amp;1.这里的win98.img有何要求?是怎么做出来的?直接将安装了win98的c:盘用winimage保存整个分区?
不是保存整个分区,而是保存整个硬盘。分区的虚拟,目前还不支持,但以后会支持的。你的硬盘要小一点才行。×××××××××××××××××接着,我就更有点不解了:老兄说:%%%%%%%%%%%%%%%%% 酷啊!grub_for_dos-0.4.0pre4支持单分区代替整个硬盘的image镜像在内存里仿真运行了!是的,这个功能已经具备了。但我本人还没有完全测试这个功能。我只是简单做了如下测试:我用一个 win98 的 1.44M 软盘镜像文件 win98dos.img 来仿真硬盘 (hd0) 是成功的。map --mem (hd0,0)/win98dos.img (hd0)
map --hook
chainloader (hd0)+1
rootnoverify (hd0)
boot由于软盘映象和硬盘分区的格式没有太大的差别,所以,这样也就等于测试了硬盘分区的仿真功能。似乎 memdisk 以及其它类似软件还没能提供这个功能。希望这个功能可以给大家带来方便。%%%%%%%%%%%%%%上面说了, 软盘景象居然可以引导了!
软盘景象连个主引导都没有,居然就可以模拟硬盘? 那有主引导的硬盘景象为什么就反而不行呢?还往老兄解释一下。。

作者: blue777     时间: 2005-3-23 00:00
你理解错了,我们说的镜像说完整应该是"可引导的镜像". 利用grub的memdrive就能在内存里虚拟一个软驱来运行.而可引导的镜像是有MBR的.没说整个硬盘镜像反而不行啊!只是说在2005年3月9日tinybit最新编译的pre4版里已经不再必须要求是整个硬盘镜像,只要求系统所在的单个分区镜像即可.

作者: 不点     时间: 2005-3-23 00:00
blue777:

你试验了吗?哪怕是用你的虚拟机也行,照我说的 copy 命令生成一个 grldr.iso,应当不难吧?这个文件很小,只有 1.5M,但却可以作为可启动的 ISO。

你又开始怀疑 GRLDR 有什么毛病了。你能不能不怀疑呢?或者暂且先别怀疑呢?

任何一个可引导的1.44M软盘,都可以制作到 ISO 中,从而使得 该 ISO 称为可启动的光盘。我这里说的是“任何”,注意这两个字特别重要。

既然 GRLDR 已经制作成了可引导的软盘,那么,用它来制作可引导的光盘,当然毫无问题了。这是光盘启动标准所规定了的。至于说你制作出来的,却不能引导,呵呵,当然应当从你制作过程找毛病了。你的制作过程,用的全部是软件,这些软件,不一定可靠。

哪有这样的道理:一个正常可启动的软盘,却不能制作可引导的光盘?你再仔细想想是不是这个理?可引导的光盘,本来就是用软盘映象来引导的,此时软盘映象没问题,而光盘却不引导,这不明摆着的吗,制作过程含有错误。

你想问我的,无非是说,我制作的 GRLDR 引导映象为什么很特殊,它为什么不能引导?

我可以告诉你,这个 GRLDR 的引导扇区,没有任何探测光盘介质的指令,它和别的软盘引导扇区都一样。你自己也可以检验这段程序,它只有 512字节的大小。根本不存在“只能从软盘而不能从光盘运行”的理由。所以,从这里,是找不到毛病的。而且,我已经制作出光盘,确实能够启动,这就验证了GRLDR 方法是可靠的,而你说的问题,也就只在你那里出现罢了。如果没有任何探测光盘介质的指令,那么就不会存在“在普通介质可以运行,而在光盘启动时不能运行”的理由。

检验软盘映象是否可作为光盘启动映象的办法,就是制作一个可以引导的映象。现在这个映象已经制作出来了,这就-----完全足够地-------证明了:该GRLDR.IMG 是没问题的。如果另外用该IMG也制作了一个引导失败的映象,那也不能否认该 IMG 是正确的这一事实。因为,要想证明该IMG有错误,你首先必须证明你制作的ISO是合法的可引导光盘,不是你的软件说它合法,它就合法了,你的软件当然认为它自己制作的是合法的了,否则,它发现不合法,怎会给你用呢?你的思想中有一个误区,就是,特别相信你的软件,只要你的软件制作出来的,你都相信它是合法的,而你自己并未亲自去检验它的合法性。

这下你该相信最终是你那里弄错了吧?


作者: blue777     时间: 2005-3-23 00:00
晕!害你费了这么大力气点化我.
我现在唯一要求就是:我要如何将grldr引导的1.44M镜像做成可引导的ISO?
难道用 copy /b before.iso + grldr.img after.iso (其中before.iso为制作前的不可引导的ISO,after为制作后的可引导的ISO)

作者: 不点     时间: 2005-3-23 00:00
GOTOmsdos兄所说的问题,确实我没有解释清楚。

在 pre4 之前,我们的 --mem 仿真只支持磁盘映象。意思就是,如果仿真软盘,就只能是一个不含分区表的映象才可以,如果是仿真硬盘,就只能是一个含有分区表的映象才可以。

在 pre4 的时候,这个限制被部分地打破了。在用 ---mem仿真硬盘的时候,映象文件可以仅仅是一个分区,也就是说,不含分区表。一个不含有分区表的映象,本来是根本不可以用来仿真整个硬盘的。我们当然需要额外替这个分区映象添加一个分区表了(实际上在它前面增加了一个磁道)。由于我们的仿真是在内存中操作,因此,这很容易做到了。我们不仅为它添加了分区表,而且还替它写了一个简短的主引导记录(MBR)程序代码。分区映象在这个仿真的硬盘分区表中所处的位置是(hd0,0),而且整个仿真硬盘只有这么一个分区存在,该分区占满了全部硬盘空间(当然除了我们所添加的第一磁道master boot track之外)。

==============

分区镜像,是不包含分区表的。虽然在一个逻辑分区开始之前也有一个“虚”分区表,但是,这个磁道并不计算在分区之内。分区的开头是以分区自己的 DOS boot record 开始的,并不是起始于“虚”分区表。

由于这个“虚”分区表的存在,这使得我们以前在0.2.0版本的时候就能够用它来仿真整个硬盘,此时没有 --mem参数,而是使用磁盘介质就地仿真。然而在这种情况下,我们只有分区表,没有主引导记录(MBR)程序代码,这是因为“虚”分区表扇区的引导记录代码是空的,而我们又不可以随便写入它(因为写入磁盘是不明智的,会给真实磁盘带来严重后果)。当然了,对于仿真磁盘来说,有没有 MBR代码,本质上是没什么太大关系的,而分区表才是关键的。



作者: 不点     时间: 2005-3-23 00:00
blue777:

前面不是说了吗?可惜你到现在还没有下载试验: copy /b win98_head.iso + grldr.img your_real_bootable.iso

其中 win98_head.iso 是在 ftp://ftp.linuxeden.com/tinybit/ 上的,grldr.img 是你自己的可引导软盘,生成的 your_real_bootable.iso 必定可以引导了。这下总应该清楚了吧?

win98_head.iso 的长度是 43008 字节,grldr.img 的长度是 1474560 字节,your_real_bootable.iso 的长度是 1517568 字节。



作者: Gandalf     时间: 2005-3-23 00:00
- 大家好!
-----------------------
- IELDR 使用的是 grldrstart.S+isoemu 的基本结构。 当, grldrstart.S 把 isoemu 的主部放到 0x0000:0x8200 后,isoemu 的主部的代码会先把整个 isoemu 移到另外一个地址去运行。。。 ;)
- 路过,看到这么精彩的讨论。 ^_^ 不点加油! 我有这么一个想法:你能否把中文显示的 patch 也放到 Grub4Dos for 0.96 里面呢?

作者: Gandalf     时间: 2005-3-23 00:00
-=Grub4Dos =-, I'm lovin it! <img src="images/smilies/face-wink.png" align="absmiddle" border="0">

作者: blue777     时间: 2005-3-23 00:00
不点兄,我意思你也没明白,我当然知道copy /b win98_head.iso + grldr.img your_real_bootable.iso 是可以引导的.但是我要做一张自己的光盘,里面有万能ghost等各种东西,最后我要让其具有引导性,而恰恰就希望用grldr.img做为其引导文件,我就问这时候该怎么办?

作者: Esme     时间: 2005-3-23 00:00
blue777,可不可以把tinybit的win98_head.iso和你的ntfs读写软件发到我邮箱里,我总是无法打开tinybit的ftp,也无法从你的网络硬盘完整的下载文件,谢谢feelkilller@163.com

作者: Esme     时间: 2005-3-23 00:00
不点,我对放弃ntfsdos pro没有意见,谢谢你的详细解答。另外我发现grldr虚拟了硬盘或者软驱后,真实的硬盘和软驱就无法使用了,有什么办法可以解决吗

作者: 不点     时间: 2005-3-23 00:00
Gandalf:

你来了很好。我似乎主要的精力在 GRUB (FORDOS)本身的基础结构方面,我认为这些比较紧迫。你的中文化补丁,确实我也有打算,升华成国际语言支持。不过我希望在我做之前,能够由别人率先完成,为什么呢?因为一个人毕竟精力和时间都不允许呀。真的感谢windrv,当时,如果我身体出现什么大的不可挽回的灾难的话,恐怕我也就和大家拜拜了。我当时病得厉害,心理占一半,身体本身也占一半,亏得bean123 能够出来解救,现在身体恢复如初,实在难以料到呀。

中文化本身,如果不具有国际化能力,我的看法是,还不适合放在 GRUB for DOS中。如果增加一块中文化的补丁,将来可能会影响国际化的设计路线。但这样吧,如果你同意负责提供中文化的补丁,我当然可以将你提供的补丁加入到现有的补丁序列当中,老实说,我以前研究过你的补丁,知道这个补丁需要改进才能支持国际化,所以,后来我就没再接触了,因此,这个补丁还需要你来打。你基于pre4打这个补丁即可,打好后,给一个下载地址,让我可以下载就行了,以后你就不用管了,我会自动让这个补丁适应新的版本的。不仅仅中文化你可以这么做,就连scdrom,ISO仿真等等,你也都可以做好补丁,我不用研究补丁的内容,只管打上去,并负责让这些补丁适应新的版本。除非你自己需要升级你打的这部分补丁,只有这时,才需要你再次重新打补丁,否则,你都可以不用再管了,我负责跟随维护。你看这样行吗?补丁的顺序,可以插在现有的 scdrom之前,也可以放在最后,视你的方便而定,而且,目前我提供的 scdrom 补丁,当然应当去掉了(如果你也打这个补丁的话)。



作者: 不点     时间: 2005-3-23 00:00
这么晚了,发完这个帖子,我就要走了,你们继续玩吧。

blue777:

你想制作可引导的映象,这个,应当说不难。你只要搜索 bootable cd-rom specification找到相关资料读一读,就可以手动制作这个光盘了。我确实不知道 windows 下有多少个制作 ISO的软件,我更不知道哪个最好。这就需要你自己想办法了。你可以把那些著名的 ISO 制作软件挨个都试试,看看谁制作的能正常引导,谁就是没有 BUG的。

Esme:


&gt; 不点,我对放弃ntfsdos pro没有意见,谢谢你的详细解答。
你不妨按照 blue777 兄的建议,改用他所推荐的 ntfs4dos ,似乎他说 ntfs4dos 这个软件没什么毛病。
&gt; 另外我发现grldr虚拟了硬盘或者软驱后,真实的硬盘和软驱就无法使用了,有什么办法可以解决吗
当然有办法了。下面仅举一例:
map --mem (hd0,0)/win98.gz (hd0)
map (hd0) (hd1)
map --harddrives=2
map --hook
chainloader (hd0)+1
rootnoverify (hd0)
boot
注意,map --mem (hd0,0)/win98.gz (hd0) 把 win98.gz 作为第一块硬盘,原来真实的第一块硬盘已经不可见了,因此需要接下来的第二条磁盘映射命令 map (hd0) (hd1),这条命令将旧的 (hd0) 当作新的第二块硬盘(hd1)来使用,也就是说,你访问 (hd1) 时,其实是在访问真实机器的 (hd0)
map --harddrives=2
为什么需要这条命令呢?我想大家可以猜到的吧?原来你的BIOS所知道的硬盘个数可能为1,现在告诉 BIOS,硬盘个数不是 1, 而已经是 2 了。
好了,我回去了,明天有时间再来吧。你们也该休息了。

作者: GOTOmsdos     时间: 2005-3-23 00:00    标题: 非虚拟的和虚拟的..
我就是问的都是可引导的, 看了不点兄讲了详细过程,
我主要想补充一下,上面不点兄也讲清楚了,每个分区都有虚分区表的,在作引导景象时,就会被加入引导信息的. 这样以后,一般讲,在引导功能上,所谓的"硬盘"景象和"分区"景象都是一样的..
另外,对 BLUE777:
光盘引导信息主要是两种:
1,非虚拟的(-no-emul-boot, emul, emulate,模拟的),也就是真实的,我想可以理解为光盘介质本身的方式,diskem1x, win2k,winxp的W2KSECT.BIN,WXPSECT.BIN好象2KB常见.
2,虚拟的,主要有虚拟成软盘和虚拟成硬盘两种.
软盘虚拟,没有主引导,有系统分区引导(A<img src="images/smilies/face-laugh.png" align="absmiddle" border="0">容量一般是1.44,2.88 常见.运行后是A:
硬盘虚拟,有主引导的,当然也有系统分区引导,容量好象是600MB之内吧,运行后是C:
可用WINIMAGE,ULTRAISO,和EASYBOOT都可做的,要加入哪种引导信息选项,好象都是光盘引导.引导信息等等字样....





作者: GOTOmsdos     时间: 2005-3-24 00:00
我用LOADLIN 从DOS直接启动到LINUX,感觉酷毙了! 但不能用EMM386 ! 要听歌,必需要EMM386 !
怎样才能两全呢?
有没有解决的,共享经验 啊!


作者: blue777     时间: 2005-3-24 00:00
ULTRAISO真是烂得可以!我分别做了grldr引导的和syslinux引导的1.44M可启动镜像,用ULTRAISO做成光盘后都不能引导,而用不点兄的win98_head.iso做都可引导.

作者: windrv     时间: 2005-3-24 00:00
以下是引用不点在2005-3-23 22:29:44的发言:
Gandalf:

你来了很好。我似乎主要的精力在 GRUB (FORDOS)本身的基础结构方面,我认为这些比较紧迫。你的中文化补丁,确实我也有打算,升华成国际语言支持。不过我希望在我做之前,能够由别人率先完成,为什么呢?因为一个人毕竟精力和时间都不允许呀。真的感谢windrv,当时,如果我身体出现什么大的不可挽回的灾难的话,恐怕我也就和大家拜拜了。我当时病得厉害,心理占一半,身体本身也占一半,亏得bean123 能够出来解救,现在身体恢复如初,实在难以料到呀。

中文化本身,如果不具有国际化能力,我的看法是,还不适合放在 GRUB for DOS中。如果增加一块中文化的补丁,将来可能会影响国际化的设计路线。但这样吧,如果你同意负责提供中文化的补丁,我当然可以将你提供的补丁加入到现有的补丁序列当中,老实说,我以前研究过你的补丁,知道这个补丁需要改进才能支持国际化,所以,后来我就没再接触了,因此,这个补丁还需要你来打。你基于pre4打这个补丁即可,打好后,给一个下载地址,让我可以下载就行了,以后你就不用管了,我会自动让这个补丁适应新的版本的。不仅仅中文化你可以这么做,就连scdrom,ISO仿真等等,你也都可以做好补丁,我不用研究补丁的内容,只管打上去,并负责让这些补丁适应新的版本。除非你自己需要升级你打的这部分补丁,只有这时,才需要你再次重新打补丁,否则,你都可以不用再管了,我负责跟随维护。你看这样行吗?补丁的顺序,可以插在现有的 scdrom之前,也可以放在最后,视你的方便而定,而且,目前我提供的 scdrom 补丁,当然应当去掉了(如果你也打这个补丁的话)。





Dear Tinybit,
You are welcome! I am glad to hear that you are fully recovered. We are all friends to help each other!
I shall shortly release my experience about making bootable iso / cd with grldr as bootloader both in emulation and non-emulation mode. please go to windrv.net to see the help documentation there.
In the coming weeks, help documentation will be written up and released on how QEMU and GRUB can be used in conjunction with WINDRV to make and test bootable image files and iso files.

作者: 不点     时间: 2005-3-24 00:00
windrv:

是吗?grldr 能被用于 non-emulation mode ? 你是如何做到的呢?那一定要和大家分享啊!这么说来,stage2_eltorito 就可以不要了,是吗?



作者: blue777     时间: 2005-3-24 00:00
To Gandalf :chainloader (hd0,0)/ieldr如果是由boot.ini加载的grldr,则可以启动ISO如果是由软盘上的grldr(或stage1,stage2),则启动ISO时,发生CPU保护错误,自动重启!

作者: 不点     时间: 2005-3-24 00:00

根据 gandalf 所说:
- IELDR 使用的是 grldrstart.S+isoemu 的基本结构。 当, grldrstart.S 把 isoemu的主部放到 0x0000:0x8200 后,isoemu 的主部的代码会先把整个 isoemu 移到另外一个地址去运行。。。 ;)
由此能够设想,下面的启动方法,比前面所提到的方法 chainloader (hd0,0)/ieldr 要更加完美:
chainloader --load-segment=0x2000 --load-offset=0 (hd0,0)/ieldr
其中,--load-segment 的值也可以是 0x1000 或者 0xd00。
请用这种启动方法吧。


作者: blue777     时间: 2005-3-25 00:00
我试了,还是不能由软盘上的menu.lst来启动ISO,尽管和硬盘上的menu.lst该项完全一致,但前者会出现
Loading Stage2 fron the CDROM......
遇到了一个随机的处理器错误。
这台 PC 自动重启。
注<img src="images/smilies/face-sad.png" align="absmiddle" border="0">hd0,0)均有ieldr,isoemu.ini,cdrom.iso.且isoemu.ini内容为isoemu cdrom.iso
title Boot from iso file (hd0,0)/cdrom.iso
chainloader --load-segment=0x1000 --load-offset=0 (hd0,0)/ieldr
只要是从装在硬盘上的grub——不论是通过boot.ini加载的grldr,还是root(hd0,0) setup(hd0,0)——的menu.lst选上述项目都可以正常启动ISO,
而只要从装在软盘上的grub——不论是grldr引导的,还是root(fd0) setup(fd0)——的menu.lst选上述项目都会出现开头描述的自动重启.

作者: blue777     时间: 2005-3-25 00:00
解决上述问题具有重要意义!因为如能解决,我一张软盘就可以让电脑从硬盘上可引导的ISO启动了.(方法见92楼)希望Gandalf和不点兄致力解决,我会继续做最忠实的测试者.

作者: Esme     时间: 2005-3-25 00:00
高手们都来捧场了!呵呵,好激动

作者: hnlyzhd     时间: 2005-3-25 00:00
TO BLUE777:
请用我的附件测试软盘启动ISO,这个软盘IMG可能是我所见到的最小的FREEDOS了。。。打开附件


作者: hnlyzhd     时间: 2005-3-25 00:00
可以放到你的GRUBDISK中用MEM来调用 这个IMG,因为它只有57K,应该 加入对你的工具盘的空间没有太大影响吧

作者: blue777     时间: 2005-3-25 00:00
这个我早就有了,在我做的syslinux引导的软盘启动盘里,dm.gz压缩镜像就是用它做内核的.其中command.com其实为ROM-DOS的miniCMD.而kernel.sys是Free-DOS的一个早期的内核.不过还是要感谢你的答复,我测试后及时反馈.

作者: 不点     时间: 2005-3-25 00:00
根据 blue777 的描述,似乎觉得 ieldr 本身可能有问题。但也不敢肯定,因为 grldr 或许也能导致这一问题的出现。不过,我现在似乎还不能发现 GRLDR 什么地方会有问题。


作者: blue777     时间: 2005-3-25 00:00
现在我不做GrubDisk启动盘啦<img src="images/smilies/face-laugh.png" align="absmiddle" border="0">你也可以看看我最新做的sysliux+grub双引导的最新启动盘,我感觉还不错呢.http://bootdisk.ys168.com 的"潘多拉盒子"目录下有下载.

作者: blue777     时间: 2005-3-25 00:00
To hnlyznd:
最新测试结果证实了不点兄的猜测:"ieldr 本身可能有问题",因为你提供的最新在纯DOS下使用的ieldr.exe自称支持MS-DOS 3.30 , FreeDOS kernel 2032 及之后版本.(你上传的那镜像我已测试,ieldr.exe不支持) 而我用纯MS-DOS 7.10实模式(只有内核io.sys+命令解释器commander.com)测试,ierldr.exe照样出现"第124楼"我描述的错误.
因此,只有ieldr作者来解决"不能从软盘的menu.lst调用(hd0,0)的ieldr来启动ISO"——尽管这是个很令人不解的BUG.

作者: hnlyzhd     时间: 2005-3-25 00:00
不对吧,那个IMG,我测试完全可以启动的,是不是你的测试环境有问题,还有就是如果你安装有保护软件或保护卡就会出现启动失败的情况.如果不信,我可以贴图给你.

作者: blue777     时间: 2005-3-25 00:00
麻烦你贴几个图让我参考参考,上传一个我测试的录象给你看:
把扩展名.zip改为.exe即可直接观看,因为论坛不支持上传exe文件.
打开附件

上面是grub通过memdrive运行镜像的录象,下面是我直接运行你给的镜像的录象,ieldr.exe可以运行了,但照样出现了我说过的错误.(把扩展名.zip改为.exe观看)
打开附件


作者: hnlyzhd     时间: 2005-3-25 00:00
请看,我用的是VPC启动,弄了几个启动过程时的画面,不知能否说明问题.


作者: blue777     时间: 2005-3-25 00:00
软盘加载ieldr是可以的,但一启动(hdd0,0)的iso,就会出现"第134楼"的录象2中自动重启的错误.
顺便问下,你贴图用的软件是什么?不要扔鸡蛋砸我啊<img src="images/smilies/face-laugh.png" align="absmiddle" border="0">我从未贴过图!


作者: hnlyzhd     时间: 2005-3-25 00:00
我看了你的录像,有一个已经启动了ISO文件,那个LOADING STAGE2说明已经启动了ISO文件,可能是ISOGRUB在虚拟上有问题,时刻表 更换一个ISO进行测试,建议这个IMG用MEMDISK来调用

作者: blue777     时间: 2005-3-25 00:00
但为何从安装到硬盘上的grub的menu.lst上通过调用ieldr,可以正确启动iso呢?还有ieldr对可引导的iso文件也很挑剔呢!你有时间自己测试就知道了.我测试用的grub.iso就是包含在最新版ieldr压缩包里提供的.我换了几个其它可引导的iso都不能启动.

作者: hnlyzhd     时间: 2005-3-25 00:00
这个呀,我没说明,有点怪我了,它可以引导EZB生成的多重启动光盘的ISO,但是它只能引导虚拟模式的ISO,非虚拟的如何XP或PE等的ISO是不能引导的.

作者: blue777     时间: 2005-3-25 00:00
哦!知道了,如此说来白忙了一场.现在ieldr太不成熟,我对其兴趣立刻没有了.期待不点兄早日出新版的grub for dos.

作者: hnlyzhd     时间: 2005-3-25 00:00
嘿嘿,你也太不知足了吧,试问你还能找到比这更好的方法来启动ISO吗,或者说你什么时候弄出个GRUB里面有RUN XXXX.ISO功能,我第一个为你祝贺.
还有我用的贴图工具传在这里你下载吧.打开附件


作者: 不点     时间: 2005-3-25 00:00
任何技术都有其局限性,有些是我们可以摆脱的,有些是不幸无法摆脱的,这就只有忍受了。我没有精力来做 ISO 模拟,而且,即使去做了,也会碰到和Gandalf所碰到的同样的问题。有关这个技术的讨论,很久以前我们就讨论过了。我看到这个问题很复杂,所以,决定不再染指。更激进一点,就说我本人,我期待着早日将CDROM 淘汰出局,免得它给我们这些技术的追随者带来太多的痛苦。我并且希望,正在发展之中的 USB 技术,千万别走 CDROM的老路,千万别再制定出类似 CDROM 这样的规范,要像硬盘那样,直接从 BIOS 这一底层,直接支持 USB 扇区读写,这样,我们就不会像CDROM 一样受微软的控制。那些 CDROM 之所以不能简单地像磁盘这样来仿真,其根本的原因是 CDROM 没有像 int13这样的读写标准,因此造成了这样一个局面,就是在 DOS 下需要一个所谓的驱动才可以访问 CDROM 的扇区。这是微软直接参与 CDROM标准制定,故意造下的孽种。它的目的是提高 DOS 的地位,贬低 BIOS 的作用。好了,不再说了,这个帖子下面,主要是谈 grub fordos 的“内存磁盘”仿真功能的,不要谈太多别的东西。有兴趣想了解的朋友,可以到 http://grub.linuxeden.com/去,看看 grub_for_dos-0.3.0 的开发页,该页目前处于停顿状态,但也许我将来有工夫的话,会继续搞的。


作者: Esme     时间: 2005-3-25 00:00
可是blue777,你说在硬盘下可以通过grldr加载ieldr后启动iso,意思是说启动xp安装盘的iso吗?我觉得这也不可能啊
另外向你请教,ntfs4dos我下了,我用普通的软盘启动电脑后运行它,logo也显示了,但在选择是否私人用处无论选yes还是no,都没什么发生,还是无法进入ntfs盘,察看内存也发现它并没有驻入内存

作者: Gandalf     时间: 2005-3-25 00:00
在我个人看来, USB 的访问现在还很麻烦,而且即便是在 Windows 平台上也有一些支绌的感觉。 你看,微软官方的说法就是,当前版本的 Windows 不支持从 USB storage 上启动,尽管,我们可以从 U 盘上用某些特殊的方法实现启动 Win9x/WinNT/WinXP. - 我的出发点是,让 Grub 拥有一个类似与 Scdrom 里的设备驱动那样。 如果是这样,我觉得,不点的 Grub4Lin 也许大有用途。 比如说,在一个 mini-Linux 上加载 USB, cdrom, Net 等驱动,以访问众多的存储介质,然后使用 Ramdisk 的方法, 由这个 mini-Linux 再转到其他的系统上去(随着 PC 硬件的发展,大内存必然会出现在个人电脑中。 ;) ); 再者,诸位可以审核一下 Acronis 的产品,它就是在 Linux Kernel 2.4 上用 fbcon 做的,很漂亮也很强健的 GUI,令人叫绝啊!---------- 此外, × 我看了帖子,发现 不点 病倒了。 “身体是革命的本钱”,要爱惜身体呀! × 诸位提到的 ieldr 的问题,可能存在,也可能不存在。 ;)

作者: 不点     时间: 2005-3-25 00:00
Gandalf:

前面我漏掉一句话,就是说,你做的中文补丁,即便没有国际化的功能,也可以放在 grub for dos中一起发布。前面我也了解到,说你想不再投入巨大力量来开发了,你可能另有工作任务。如果有你的补丁,那么中文用户比较欢迎。这样我可以把编译的程序分成两部分,一部分是没有中文支持的纯英文版本,一部分是有中文支持的版本。另外现在身体已经好了,谢谢你的关心啊。

刚才你谈到的问题,我也想说点看法。

我觉得和你的观点稍微有些不同。首先,究竟应该怎么看待实模式?这是 Intel CPU 进化到 286 之后,才出现的问题,以前全部都是实模式,没有保护模式。因此,BIOS 都是按照实模式的套路去设计的,并且这也已经形成工业标准,不能随便更改了。

磁盘介质,光盘介质,USB 介质等等这类,都属于“块设备”,它们都是按扇区来访问的,有着统一性。因此 BIOS直接支持它们,是很容易的,这也是 BIOS 份内的事情,责无旁贷。保护模式的操作系统,固然有一套全新的处理,完全甩开BIOS,但是,实模式的系统却很小巧玲珑,这些系统当然喜欢使用 BIOS 了,利用了BIOS,这些实模式操作系统就不需要再重复编写这些驱动了,有着“节约”的美德。一张软盘就能装的系统,谁不喜欢呢?尽管微软竭力想阻止用户继续接触DOS,但是,它却制止不了,这不是以它微软的意志为转移的。人们还是要努力研究操作系统的精髓,不会上它微软的当。微软把操作系统故意搞成海量的、庞然大物,其目的,就是要制造屏障,让其它人不再能够容易地接触到操作系统的核心。举一个很简单的例子,NTFS 系统的引导代码,总共只有 7个扇区,却没人能把它的结构说清楚,到目前为至,还没有一个人能给出明晰的、完整的注释。如此一来,我们连 NT是如何启动的,都不甚清楚,更别奢谈对它的深层能有所了解了。--------呵呵,这离题太远了,不说了。总之,实模式仍然是我们离不开的,它是现代保护模式操作系统的“引子”,任何操作系统都经由它来引导进入。GRUB 就是在实模式之下发挥它的威力。

你说:“我的出发点是,让 Grub 拥有一个类似与 Scdrom 里的设备驱动那样。”我也同意,但也有不同观点。设备驱动这些,属于操作系统管辖范围,或者属于 BIOS 的。尽管 GRUB有很多驱动,比如网卡,但是,这都是迫不得已,因为大多数 BIOS 没有这些驱动。像 CDROM 这些存贮介质,是不应当由 GRUB去驱动它的。我们宝贵的 640KB 常规内存,如果给 CDROM 驱动程序占去若干个KB,这也是一个不小的损失啊。如果再加上其它驱动,那损失就更大了,而且,驱动多了,还会互相冲突,造成死机等等难以找到原因的各种问题。GRUB所具有的另一种驱动是“文件系统驱动”,它要识别很多文件系统,因而它得具有这些驱动,这不能去掉,因为去掉它就不行了。但是另一方面,如果 GRUB能将 CDROM 完全驱动,那也确实算是一件大好的事情,因为这可以部分地弥补 CDROM 和 BIOS 所固有的不足。然而,目前的SCDROM 模块,连 win98 的安装光盘都不能启动,因此,路还长着呢。我认为,scdrom要想最终获得大家的认可,必须支持各种仿真:no-emulation, floppy-emulation 和harddisk-emulation都要支持了才行啊,而且,技术上讲,确实也可以做到这一点。任何缺陷都是大家所不能接受的,所以,如果有人报怨,那是可以理解的,而且,我这么认为:报怨者其实也是你的信任者,他对你的技术有着基本的肯定,才去报怨,如果他全盘否定了你的技术,那他就没必要报怨了,他直接走了就完事了。

对不起,我平时没这么多废话,今天怎么这么多的废话。

grub4lin 可以在 linux 下启动实模式的 GRUB。这就使得 LINUX 可以作为一个大的引导管理器来用。和 DOS不同,LINUX 处于保护模式。因此 grub4lin确实解决了一个不小的问题。不过,用大内存进入其它操作系统,恐怕未必总是可能的。我们已经知道 DOS 和 Win98是可以这么做了,但是,微软的NT/2000/XP/LH/........等等等等,肯定都不行了,因为微软会阻止人们这样做的,它决不愿意看到它的操作系统被人用内存盘来运行,因为这样一来,操作系统无法记录该系统被运行了多少次,它无法知道,什么时候其 license 该终止,它也无法收集用户的真实信息。

你提到的 Acronis,我还没有听说过,不过我真的希望,linux 能够迅速崛起,达到和微软抗衡的程度,那就太好了。


作者: blue777     时间: 2005-3-25 00:00


作者: pierrexqw     时间: 2005-3-28 00:00
呵,在01年的时候就开始用acronis的OS Selector,那个时候还叫bootwizard呢,是和PTS-DOS从同一个实验室出来的~~GUI那个华丽啊~~~但是光盘启动它一直没有解决。可能作为一个商业软件,它需要更稳定吧。

作者: Esme     时间: 2005-3-29 00:00
to hnlyzhd:grldr已经可以用普通的软盘img虚拟硬盘分区,其原理是为img写个假的硬盘分区表和MBR,不知道你是否可以参照这个方法,使ieldr让普通的软盘iso或者软盘img,当作光盘iso引导?

作者: windrv     时间: 2005-3-29 00:00
以下是引用不点在2005-3-24 13:00:12的发言:
windrv:

是吗?grldr 能被用于 non-emulation mode ? 你是如何做到的呢?那一定要和大家分享啊!这么说来,stage2_eltorito 就可以不要了,是吗?





Dear Tinybit,
According to Bean, he added your Grub4DOS patches into GNU GRUB and did recompilation, such patches will appear in stage2_eltorito. So stage2_eltorito in fact includes grldr .

作者: Gandalf     时间: 2005-3-31 00:00
一个想法: Linux 的内核载入用到了内存实时解压缩,他用的是 gzip 的代码。 我看了看,压缩率几乎能达到 50%;那如果将 grldrstart.S 的生成代码也进行压缩,如果考虑 8 个扇区的限制,那么我们实际可以使用的扇区在使用了压缩方式后可以达到 16 个扇区。 grldr.hdr 的功能将会得到极大的扩展。 当然,我们也许需要考虑解压缩代码 grldr_decompress() 的大小,和实际的压缩率。 但,无论如何,我们肯定可以得到 &gt; 12 个扇区的功能代码。 Mr. tinybit 这个不知道对你更进 grldrstart.S 是否有帮助? 此外,如果,我们在对 grub 的 stage2 实施相同的做法,那么,着 150 KB 的代码就能在某种恰当的方式下被放置到 64kb 的 rom 中去,作为一个多起动环境,或者紧急修复 - 要知道,我们的 grub 支持网络启动来着。^_^.

作者: Gandalf     时间: 2005-3-31 00:00
支持不点: 我现在忙于工作,刚刚过了试用期。 ^_^ 我会在恰当的时间,把 0.96 打上中文显示的补丁,并更进一下中文显示的方式,比如把字库进行压缩,节省存储空间; 还有,其实,我想也可以考虑为 gfxboot 作一个专门的 patch. - 这些以后的维护就多多仰仗不点的努力了,我现在考虑的是尝试着作一个操作系统,保护模式的,要么启动后就是一个虚拟机,要么能支持运行程序,多起动功能就是运行的一道用户程序,^_^。 这说得有点大了。 一个打算嘛,也是一种尝试,想一下总可以吧?! ^_^ Grub 很好,很强健;可是,我们的操作系统也需要有“好事者”,我现去看看。 如果行情还好,我觉得,大家一起干;虽然是基于人家的 CPU, 但是,我们也能学点东西,为后来者铺路嘛!

作者: 不点     时间: 2005-4-1 00:00
grldr的启动代码,这一部分,最大允许 16 个扇区,这已经够用的了,因此,我们无需考虑采用压缩技术。另外,压缩技术一般是适用于大的文件,对小的,几个 K 的文件,效果不会太好,正如你所说,解压代码还要占据一定的空间呢。

stage2 的要压缩的话,估计能压缩到 4:1 甚至更高的比率,方法主要不是依靠“压缩”技术,而是把 C 语言转成 assembly 就可以了。但是做这个,似乎意义不太大(我个人认为),因为 grub 的功能在增加,这还是会使得 GRUB 逐渐变大的。

前面有朋友曾经用“鸡肋”这个词语来形容一项功能的优点太渺小。GRUB 中就有很多这样的“鸡肋”,比如我自己就认为 savedefault 就是一个“鸡肋”,其它的“鸡肋”还多着呢。如果把这些鸡肋都去掉,GRUB 也可以大幅度减小体积。

我目前不看好将 GRUB 放在 ROM 这个做法,它既不容易,也不太必要。ROM 有它自己的功能,主要是提供统一的标准 BIOS中断接口,以前 IBM 把 BASIC 语言也放在 ROM中,后来都不再这么做了。新奇的做法,并不总是具有生命力;而标准的做法,往往具有强大的生命力的。当然这不是“否认新技术,否认改革,否认前进”的意思,而是,我认为做任何事情都要有一个权衡,比较一下得失。前面我们提到“鸡肋”,即便有可能将 GRUB 放进 ROM中,那么我仍然认为这是一个“鸡肋”,当然,我可能落伍了,我说的也只是我自己的看法而已,大家在技术方面该怎么发展就怎么发展,我本人就不受任何教条的束缚,所以我的话也不一定就很对,完全不要当一回事。


作者: 不点     时间: 2005-4-1 00:00
祝贺你过了试用期,世界需要能干的人,相信你的老板也需要这样的人。在你工作之余,可以为 GRUB 再做点事情,因为 GRUB 需要你做。但是,你的工作属于第一位的,这个,大家都可以理解的。GRUB 的事情,完全可以往后面放啊,这个都没关系的。

你愿意做多少个补丁,都可以的,你慢慢做吧,把比较成熟的版本提供给我就行。好像应该在 GRUB for DOS 的发布中开辟一个目录,专门存放你做的中文等补丁及其编译结果,这样也不影响原来的纯英文的发布。

你做操作系统的想法,我是比较赞成的。GRUB本身就算是一个不太成熟的操作系统,如果再加以完善,就可以成为一个不折不扣的、完美的操作系统了。但是前面我提到了,GRUB本身也并不完美,要把它改造成操作系统,还需要一个“去伪存真”的过程,吸取其精华,剔除其糟粕,然后才达到精炼、合理、强悍。自己另外设计一套操作系统也是可以的,刚开始,可以跨出一小步,以后慢慢再展开,不要急于求成。关键是,自己所设计的操作系统,要和现存的那些操作系统有差别才行,比如在某方面强过现存的所有的操作系统,这才有前途。只要能想到,就有可能做到。世界缺乏有胆略的人,没了胆子,什么都完蛋了。很支持你。

作者: 不点     时间: 2005-4-1 00:00
windrv 兄提到的 GRLDR 作为 CDROM no-emulation-mode 的可引导映象问题,是完全能够实现的。现在处于测试阶段:

New grldr can be used with no-emulation-mode bootable CDROM:

At a Linux shell prompt, type these commands:

mkdir iso_root
cp grldr iso_root
mkisofs -R -b grldr -no-emul-boot -boot-load-seg 0x1000 -o grub_bootable_cdrom.iso iso_root

and the created file grub_bootable_cdrom.iso is then a bootable CDROM image.

Download the latest grldr: ftp://ftp.linuxeden.com/tinybit/grldr

已经发现 configfile 命令有严重缺陷导致死机,等解决了这一问题后,就可以用新的 GRLDR 来代替 stage2_eltorito 了。



作者: Gandalf     时间: 2005-4-4 00:00
我看了看 grldrstart.S 和 dosstart.S ,我想是不是还能把这两者进行合并呢? 应为,从 NTLDR 载入的时候,并不是从 grldrstart.S 的 0 处开始运行。 ^_^, 不点,你有何高见?

作者: 不点     时间: 2005-4-4 00:00
grldrstart.S 和 dosstart.S, 应当是无法再合并了。主要的困难在于,DOS EXE 格式必须以 MZ 开头,而不是以 JMP 开头。

0.4.0pre5 已经上载了,但是 configfile 命令无法使用了,所以大家不要下载。当然,如果有人愿意帮助解决问题的话,可以下载,并帮助修改源程序。



作者: 不点     时间: 2005-4-4 00:00
刚才漏掉了一点。虽然 由 NTLDR 载入 grldr 时,是从 0x256 开始执行,但是,当把 GRLDR 安装到MBR,我们仍然是从偏移 0 开始执行。GRLDR第一扇区已经是高度集成化的了,能节约的字节,都尽力节约掉了,剩下的,几乎不能再有任何更动的余地了。因此,要把 GRLDR和另外一个东西(比如grub.exe, grub4lin)合并,都是不可能了。另外,grub.exe 和 grub4lin倒是有合并的可能,不过,其合并的意义不大。


作者: Gandalf     时间: 2005-4-5 00:00
昨天下午,我也考虑了一下。 在技术上, grldr 和 grldr.exe 合并是没有问题的,这样的话,就只能用 ntldr 来载入了。 而且必须修改两者的代码。 结构看起来像这样:
0x0000 MZ_Header &lt;Point_to_MZ_EXE_STUB&gt;0x0256 JMP &lt;Point_to_LDR_STUB&gt;0x0400 &lt;LDR_STUB&gt;0x0C00 &lt;MZ_EXE_STUB&gt;0x1000 GRUB_STAGE2_STUB
----------------------我想,也是,没什么太大的意义,悉罢之

作者: 不点     时间: 2005-4-5 00:00
GRLDR 的结构,是很奇特的。它是一个“多合一”的结构,第一扇区最拥挤,不能够再挤得下DOS MZ 格式的32个字节了。

GRLDR 符合 NTLDR 的结构,因此,它的第一条指令,必须是 JMP 指令;而且,从 第三个字节开始,必须是 FAT_12_16的补丁代码(这是NTLDR结构所必然要求的)。GRLDR 的这一结构,和 DOS 的 EXE 格式是冲突的,因此,不可能将它和grub.exe 进行合并了。

GRLDR 的第一扇区,可被用来写入 MBR,即使没有后续的辅助扇区,该扇区也可以有一定的查找功能,可以找到主分区中的 GRLDR,不过对不含 NT bootsector 的FAT12/16/32分区,这个查找会失败, 因此需要后续的那些辅助扇区。

GRLDR 还可以当作 no-emul-boot 的引导映象。GRLDR的第3第4扇区可以用来写入软盘引导区。所有这些都不太要紧,关键是第一扇区太拥挤了,再也挤不下别的结构了。决不是说挤进去之后“有没有意义”的问题,而是根本就挤不进去了,没有空间了。


作者: 不点     时间: 2005-4-7 00:00
0.4.0pre6 已经上载到老地方的 FTP 空间,解决了 configfile 命令的巨大 BUG。

0.4.0pre7 也将上载,做了一点改进,优先查找 config_file , 也就是 /menu.lst,失败时才执行 preset_menu,这样才更合理。

作者: Gandalf     时间: 2005-4-7 00:00
不点兄,我想了想,还有办法作这么一个事情,让 grub.exe 在 Windows 下拥有图标!! ;)


TOD
============

将 ieldr 和 ieldr.exe 合并。 生成 aviator.exe.

这个 aviator.exe 得使用方法是:

1. 用 ntldr 载入
c:\aviator.exe="Boot AviatoR demo"

2. 在 纯 DOS 下使用
a:\&gt;aviator.exe

3. 在 Windows 下使用
双击就可以了。

作者: 不点     时间: 2005-4-7 00:00
我不太知道 IELDR 和 IELDR.EXE 的结构。不过,似乎你曾经说 IELDR 是 GRLDR 的结构格式,IELDR.EXE 是 grub.exe 的结构格式。如果确实是这样,那么,不可能将两者合并了,正如前面所说。

假如你一定要合并,恐怕合并之后,要损失功能了,比如,你把 grldrstart.S 第一扇区中的 FAT_12_16 补丁代码去掉,那么 IELDR 就不能适应 FAT12/16 的文件系统了。

在 win98 下确实可以双击 grub.exe 来运行 grub,只要把随 grub_for_dos 一起发布的 grub.pif文件放在与 grub.exe 相同的目录下便可。如果你相应地制作了 ieldr.pif 文件,那么当然也可以双击启动 ieldr.exe 了。

-------------------------------------------------------------------------------------------------------

0.4.0pre7 已经上载,支持优先查找 “和 grldr 处在相同根目录的 menu.lst 文件”。什么意思呢?就是说,

当 (hd0,0) 中的 GRLDR 获得执行权的时候,它将查找 (hd0,0)/menu.lst 文件,并立即执行它。
当 (hd0,1) 中的 GRLDR 获得执行权的时候,它将查找 (hd0,1)/menu.lst 文件,并立即执行它。
……………………………………………………………………………………………………
当 (hd0,n) 中的 GRLDR 获得执行权的时候,它将查找 (hd0,n)/menu.lst 文件,并立即执行它。

同理,当 (hdM,n) 中的 GRLDR 获得执行权的时候,它将查找 (hdM,n)/menu.lst 文件,并立即执行它。

当 (fd0) 中的 GRLDR 获得执行权的时候,它将查找 (fd0)/menu.lst 文件,并立即执行它。
当 (cd) 中的 GRLDR 获得执行权的时候,它将查找 (cd)/menu.lst 文件,并立即执行它。

只有当上述文件找不到的时候,才转而执行 preset_menu 的内容。

简言之,与 GRLDR 处于相同目录的 menu.lst 将无条件获得执行。只有该 menu.lst 文件不存在时,才去执行 preset_menu, 继续查找其它分区中的 /menu.lst 文件。

这是 pre7 才有的功能。



作者: Gandalf     时间: 2005-4-8 00:00
支持一下 pre7.-------------我的意思可能不是你所理解到的意思。 ;) 我的意思是你的意思的逆向,或者更进。 简单的说来,就是不仅让 grldr 和 grub.exe 合并,而且,在同一个可执行程序里还带上pe 代码,就是 Windows 的 GUI. 直观得说来,就是可以为 grub.exe 加上一个 Windows环境下得图标。 不点,你推荐一下?!

作者: Gandalf     时间: 2005-4-8 00:00
p.s. 不点,你有 msn 或者 QQ 号吗? 我想和你讨论一下 grub 的相关问题。 如果方便的话:MSN: jsf_f22@msn.com

作者: 不点     时间: 2005-4-8 00:00
实在对不起,我除了 email 和论坛之外,其它的都不用。你可以用本论坛的短信方式和我联系。email 方式不太好,我一个月才看一次 email。这个论坛我来的还是比较及时的,几乎每天都来。

PE 格式的属于 windows 程序。在 windows 下,运行的程序都是保护模式的,而 grub.exe 需要实模式才能工作。从windows 的保护模式切换到实模式,不容易呀。这个要是实现了,那将是很大的突破。我以前把 GRLDR 叫做 grub for ntldr而不是叫做 grub for windows,其原因就是,grldr 只能在 NTLDR 下运行,它不能在 Windows下运行。如果你能实现从保护模式到实模式的切换,那么,你制作的 GRUB 就可以称为 GRUB for WINDOWS 了。我制作的grub4lin 就是在 linux 下从 保护模式运行实模式的 GRUB,它可以称做 grub for linux。

至于说图标,你自己喜欢什么样的都行,我没有美术细胞,帮不了你。关键是要解决 CPU 模式的切换,这个要是解决了,有没有图标都无关紧要了。我觉得很不容易呀,希望你能成功。



作者: windrv     时间: 2005-4-8 00:00
以下是引用不点在2005-4-8 9:45:19的发言:
实在对不起,我除了 email 和论坛之外,其它的都不用。你可以用本论坛的短信方式和我联系。email 方式不太好,我一个月才看一次 email。这个论坛我来的还是比较及时的,几乎每天都来。

PE 格式的属于 windows 程序。在 windows 下,运行的程序都是保护模式的,而 grub.exe 需要实模式才能工作。从windows 的保护模式切换到实模式,不容易呀。这个要是实现了,那将是很大的突破。我以前把 GRLDR 叫做 grub for ntldr而不是叫做 grub for windows,其原因就是,grldr 只能在 NTLDR 下运行,它不能在 Windows下运行。如果你能实现从保护模式到实模式的切换,那么,你制作的 GRUB 就可以称为 GRUB for WINDOWS 了。我制作的grub4lin 就是在 linux 下从 保护模式运行实模式的 GRUB,它可以称做 grub for linux。

至于说图标,你自己喜欢什么样的都行,我没有美术细胞,帮不了你。关键是要解决 CPU 模式的切换,这个要是解决了,有没有图标都无关紧要了。我觉得很不容易呀,希望你能成功。




Dear Tinybit,
I have sent you an email. And I repeat my question addressed to you therein as follows:
The map command does not seem to work when grub4dos is used in non-emulation mode. For instance:
map (cd)/image.img (fd0)
does not seem to work.
May be the map command originally is designed to with with FAT/NTFS partition. Is it possible to make it work under iso filesystem format? Or is it too time-consuming or too large a piece of work to do so?

作者: 不点     时间: 2005-4-8 00:00
map 命令不能用于 no-emulation mode 的 CDROM 文件,这是正常的。其原因是 no-emulation mode规范是微软插手制定的,它是一个不兼容性的规范,扇区大小采用的是 2048 字节,而不是通常的 512 字节。虽然 no-emulationmode 的光盘扇区可以用 int13 的 LBA模式来读,但是,得到的扇区大小与我们仿真为磁盘后的扇区大小是冲突的,所以,仿真之后就不能使用了,是无效的仿真。

如果 (cd)/image.img 文件不太大,而你的内存也够用,你可以考虑用 map 命令的 --mem 参数在内存中来仿真,这是肯定可以成功的:

map --mem (cd)/image.img (fd0)



作者: gmy     时间: 2005-4-14 00:00
grldr 有严重问题,我的 超级急救盘 硬盘版 基于 0.2.0 最终版,网友们报告BUG说,grldr 在某些WIN2000版本和某些XP SP2使用不能用,出现extended or non-MS: skip ,解决的办法另我大吃一惊:用 XP_SP1 的 NTLDR 和 BOOTFONT.BIN 覆盖 同名文件 就可以用GRUB了。我分析,可能是 grldr 的编写环境是 XP SP1 ,希望 grldr 的代码更严谨一些,解决此BUG。(0.4.0没试过)

作者: hnlyzhd     时间: 2005-4-15 00:00
to gmy:你所用的是不是新编译的GRLDR呢?TO 不点:在使用QEMU的过程中遇到一些问题请求帮助:1.启动后不能够在虚拟的硬盘镜像上使用GHOST来快速安装系统.2.不能够启动EZBOOT生成的24位真彩ISO.3.不知能否挂载本机的物理硬盘为QEMU的硬盘.

作者: 不点     时间: 2005-4-15 00:00
0.2.0 最终版和 0.4.0 预览版是同一天发布的。之所以这样,就是想让大家转向 0.4.0 版本。
0.2.0 不再更新了,也就是说,不会再有 0.2.1 版本了。报告 BUG 时,一般常规,都是要求先试试最新版再说。

由于 0.2 已经不再开发了,因此,我已经忘记了在 GRLDR 查找代码部分是否有 BUG 了。我印象中,似乎 0.4 的版本纠正了某些错误。

不过,你的 BUG 报告似乎不太准确。这个错误:extended or non-MS: skip,表明所涉及到的分区类型不是已知的NTFS/FAT 类型。即便更换 NTLDR 等文件,也无济于事,因为这个信息是 GRLDR发出来的。在这条错误之前和之后,还有其它错误信息,不提供这些信息,就不能判断究竟哪里出现了错误。希望能得到准确的报告。



作者: 不点     时间: 2005-4-15 00:00
hnlyzhd:用短信回复了 QEMU 的问题。

作者: Gandalf     时间: 2005-4-15 00:00
^_^,不点你的手机号是?!

作者: 不点     时间: 2005-4-15 00:00
刚才有人问了我的留言簿,我说我接受新生事物真的有些迟钝。我既没有 QQ 即时通讯,也没有博客,也没有手机。别人都说我难找。不过将来有可能的话,可以考虑开辟一个留言簿,可我又不敢开辟,因为我不一定总去看它。

作者: 不点     时间: 2005-4-15 00:00
Esme 说 FTP 无法访问,那么现在可以从 http://grub.linuxeden.com/wakka.php?wakka=UploadFile 下载。



补充:好像最近碰上了大规模的封网行动,试试以下的下载地址(不保证总能下载成功):



ftp://upload:upload@202.114.23.161/grub_for_dos-0.4.0.tar.gz





作者: GONGXP     时间: 2005-4-16 00:00    标题: rpl启动的dos无法使用grub
grub的确使人耳目一新。从netware下远程启动的dos(6.22或者7.1)无法使用grub,错误:
Programs such as TSRs and drvice drivers may also change the BIOS interrupt vector table.
Make sure those programs are not runing,then try again.

作者: 不点     时间: 2005-4-17 00:00
麻烦 GONGXP 兄详细说说 netware 的启动过程等详细信息。我从来没有使用过 netware。

假如我知道了 netware 的运作机理,那么我就有可能知道究竟未来的 grub.exe 可否支持它。

另外最好也请说说为什么要使用 netware,说说它的用途,帮助我进一步了解它。

我对网络比较外行,该问题也可以由 GANDALF、BEAN123 等人来答复或者解决。



作者: dos@fans1     时间: 2005-4-17 00:00
我下的pre7版的grldr怎么不能引导Wengier的 超级通用MS-DOS 7.10启动盘镜像。这个启动盘镜像也是由grub引导的。但屏幕显示表明grldr只引导到stage1就没有响应了。以前的版本没有这个问题。

作者: 不点     时间: 2005-4-18 00:00
注意,GRLDR 和 stage1 毫无关系。GRLDR 不会使用 stage1 和 stage2;而使用 stage1 和 stage2 的,一定是旧版本的 GNU GRUB,这是一个不推荐的启动方法。

GRLDR 只要能够获得控制并进入 GRUB 环境,这就是 GRLDR 的成功。在进入 GRUB的环境之后,又可以引导某个磁盘映象中的操作系统,这便是 GRUB for DOS的成功。至于说该磁盘映象会出现各种错误,比如死机,那可能有多方面的原因。这可能和启动该映象的方法有关,比如,map 命令是否带了 --mem参数以及您的 BIOS 是否支持 INT13/EAX=e820h 调用;也可能和该映象中的程序代码有关,比如这些程序代码不支持INT13/EAX=e820h 调用规范。“超级通用MS-DOS 7.10启动盘”中的旧版本 GNU GRUB 很有可能真的不支持INT13/EAX=e820h 调用规范,因为它毕竟是很多年以前的发布了,已经太过于陈旧了。

GRLDR 本身出现错误的可能性不大。


作者: GONGXP     时间: 2005-4-18 00:00
netware是一个从dos启动的服务器操作系统,其远程 启动最少要二台计算机,一台运行netware,另一台有网卡,并有rpl启动芯片。在一台dos计算机,将一张启动dos的软盘,制作成镜像文件,存在netware服务器上。以后,那台有带rpl启动芯片网卡的计算机就可以选择从远程启动(int19中断),启动那张软盘上的dos系统,这个dos系统可以启动windows98,windows me,也可以通过loadlin启动linux,也可以通过loadce启动windows ce。不过,这个dos是“污染”了bios的中断向量,不知可否让grub.exe在这个dos上运行?
至今为止,无盘启动dos,远程启动dos,最好的网络操作系统仍是netware,目前在证券公司广泛使用。

作者: 不点     时间: 2005-4-18 00:00
确实是专业高手,谢谢。

按照你的描述,计算机通过网卡访问远程 DOS 软盘。我猜这里面应当有一个仿真存在:

第一种可能,将远程 DOS 软盘直接装入本机的扩展内存,然后实施“用内存仿真软盘”的功能。
第二种可能,INT13 的处理程序直接将机器对于软盘的访问,重新定向到网络,也就是直接定向到远程软盘。这种方法,不需要占用本机的物理内存空间。

不管是哪种情况,只要这些都是在 BIOS 内部操作,那么这都是可以运行 GRUB.EXE 的。你上面提到的出错信息,说明这些操作已经超出 BIOS 的范围,进入普通的用户程序。

DOS无论是否经由远程启动,它都会污染BIOS中断向量。grub.exe在刚开始运行的时候,就要检查有哪些中断向量被污染过了,如果这些中断向量是不重要的,那么任其污染也不予理睬,继续运行GRUB。如果发现关键的中断向量被污染了,那么,grub.exe就采取一系列步骤来自动探测被污染了的中断向量的原始值,如果找到原始值,那么就恢复该值,并宣告恢复成功,继续运行GRUB。如果未能找到原始的中断向量入口地址值,那么打印出错信息,退回到 DOS。

1. 有哪些关键的中断向量?

int08,int09,int0a,int0b,int0c,int0d,int0e,int0f
int70,int71,int72,int73,int74,int75,int76,int77

这 16 个中断是硬件中断,它们是 grub4dos 所认为的最关键的中断向量。除此之外,grub4dos 还认为许多低于 int20 的中断也是关键的中断。比如 int13, int10, int16 等等吧。

grub4dos 认为上述中断必须正确恢复为 BIOS 的原始入口地址值,有一个恢复失败都将认为是失败,从而拒绝进入 GRUB 环境中。

2. 如何判断一个中断向量的中断入口地址是否被污染过?

当入口地址是 c000:0000 以上的代码空间时,就认为该中断是 BIOS 原始的中断,无需恢复,否则,如果是低于 c000:0000 的值,就认为是污染过了。

希望这些信息能给您带来某些帮助。如果您能够解决掉该问题,也希望能够把经验与大家共享。如果您能提供一个补丁什么的,我当然非常欢迎了。

-----------------------

如果您的(服务器端所提供的) DOS 软盘中有 config.sys 和 autoexec.bat,那么你应当确保其中没有 TSR驻留程序,否则,GRUB.EXE 是不能运行的,显示的错误就像您前面贴出的那样。即使你在本机运行 DOS也有此要求。这一点您或许已经知道了,不过还是要提醒一下,以免万一您以前不曾了解到这一点。



作者: dos@fans1     时间: 2005-4-18 00:00
对不起,我没有说清楚。“超级dos启动盘“的镜像上本来就有一个grub,这样在启动时有一个选择菜单可以选择是从硬盘启动还是启动dos或者从光盘启动。但是pre7版的grldr就只能把镜像中的这个grub引导到stage1,而看不到选择菜单。但以前版本的grubfordos是能够引导成功的。所以我认为这是这个版本的一个bug。“超级dos启动盘“在本站很容易下的。不点大侠可以试一试。

作者: GONGXP     时间: 2005-4-18 00:00
多谢您这么快响应。

netware(novell)远程启动dos的确采用的是您说的第二种可能,INT13 的处理程序直接将机器对于软盘的访问,这种方法,不需要占用本机的物理内存空间,(但是占内存,下述)。以下英文资料是微软关于novell rpl远程启动的资料。
rpl的启动过程是由bios调用网卡(或者集成在主板bios中)中的rpl.rom完成,rpl.rom占用常规内存,驱动网卡和ipx协议,并拦截INT13,在系统无启动软盘情况下,将机器对于软盘的访问直接重定向到novell服务器的软盘镜像。这里有二点有参考意义:
1.采用hd-copy格式化的空软盘,放在软驱中,系统设定从软驱启动,系统启动后可以从软盘启动转向,直接启动硬盘的操作系统,无任是dos,还是win2000。将这张空软盘做成镜像文件,放在novell服务器,设定远程rpl工作站从这张软盘启动,可以启动硬盘的dos系统但是不能启动硬盘的windows2000系统(ntldr),也不能启动硬盘dos下的grub.exe。
2.rpl远程启动后,系统a:盘指向服务器软盘镜像文件,占用100多k常规内存,运行微软提供的一个28字节的nwrpltrm.com后,系统a:盘指向本机a:盘,rpl占用内存基本释放,这时也不能启动grub.exe。


Under the Novell RPL process, the Novell RPL ROM's initialization routine will save the Boot Strap interrupt vector (INT 19H) and replace it with an interrupt vector pointing to its own Boot Strap handler. After this is completed, the Novell ROM will return to the system BIOS.


When the system BIOS completes system initialization, it calls the Boot Strap interrupt to begin the boot process. This call now transfers control to the Novell Boot ROM's Boot Strap handler routine. The Boot Strap handler will then check to see if it sees a floppy disk in the workstation. If it finds one, it restores the Boot Strap interrupt vector and then calls it to boot from the floppy. If no floppy is found, the ROM looks for a hard disk. If a hard disk is found, it prompts the user of the workstation with a query whether to boot from the network or the hard disk. If hard disk is chosen, the ROM restores the Boot Strap interrupt vector and then calls it to boot from the hard disk. If network boot is chosen, or there was no hard disk in the workstation, the ROM begins its autoboot sequence.


At this point the Novell RPL ROM checks the workstation to verify that enough system RAM exists. If there's at least 128K of RAM, the ROM will copy itself into RAM so that it can set up its internal variables. This is done because the Novell RPL ROM is composed of two parts: the IPX RPL code and the IPX network driver code. The network driver code is developed by third-party NIC developers from their normal Novell IPX shell drivers. Since this code is derived from the IPX shell driver code, these drivers make no provision for being placed into ROM. Because of this, the Novell ROM copies itself into memory so the shell drivers do not have to be totally rewritten for the RPL ROM environment--they are merely a simplified version of the IPX shell driver code.


Once the ROM code is copied into RAM, the ROM image will then set up the network boot screen and initialize the NIC. If the NIC is initialized successfully, the ROM image will then use the IPX protocol to find a Novell boot server.




Under the Novell RPL implementation, the Novell RPL ROM includes the capability to emulate a diskette by replacing the INT 13H interrupt vector that handles diskette requests and redirects them over the network to a Novell server. After the Novell RPL ROM has completed the initialization process, it uses the Novell IPX protocol to locate and "connect" to a Novell server. The ROM will then replace the INT 13H diskette handler interrupt vector with an interrupt vector which points to a diskette emulator routine in the ROM image.


The diskette emulator routine in the ROM image redirects all diskette requests over the network to the Novell server that it attached to previously. The Novell server contains a bootable diskette image file which looks exactly like a diskette would in the floppy drive. The server takes the sector requests and responds with the appropriate disk information back to the diskette emulator in the ROM image of the workstation. In turn, the emulator returns the disk information to the caller of the INT 13H interrupt.






作者: GONGXP     时间: 2005-4-19 00:00
以下是novell远程启动的详细资料。 How Novell's BootROM works. It uses technique described above, saving original vector at 0:300h, and setting word at 0:304h to 6a6eh, which is flag telling that the vectors were changed. Then returns. When invoked by INT 19h it first attempts to read boot sector from floppy A: - if succeed, it (A) restores original INT 19h vector and invokes it for BIOS to boot the computer as usually. Next it check for presence of harddisk, and if present it does the following: 1. some video processing - moves cursor to home position, asks for video mode, if 7 assumes mono else sets mode 3 (=CO80) and sets cursor shape according to the mode, finally clears screen (assuming address 0B0000h for mono, 0B8000h for color mode, and usual size); 2. displays a question "Boot from Network (Y or N) ? ", and gets answer (if invalid it repeats the question), on N it displays CRLF and goes to A. Then the code is moved to segment MemTop-900h, stack is set to 0:0c000h and jump is done to the moved code. After the jump it initializes video as already described and displays "Novell Netware Remote Program Loader", driver info, and Novell's copyright, then enters boot loop. In the loop it: - calls driver initialization code (2 procedures, the second may return error - ZF=0 means AX=offset of error message, in such a case it shows the message, displays "Error initializing network interface board" and waits 3 second, then retries) - sends packet from socket 4A58 to broadcast address with socket 0452 (SAP=Service Advertisement Protocol socket) containing SAP query for nearest fileserver, and reads the reply; an immediate address of replying node will be used to route all requests, destination address net part will be used as net part of own address, and the FS address will be used to access the server - sends NCP ATTACH request from socket 4A57 (note socket change: it prevents receiving replies to SAP query), and gets from the reply connection id (ATTACH only uses connection id 0FFh) - sends LOGOUT request, error if no reply or invalid - sends OPEN requests on the following files: BOOTCONF.SYS (on success it is scanned, using READ requests to get data from it, for line for this W/S, and file specified in it is tried first), then NET$DOS.SYS, IBM$DOS.SYS, first successfull open on image file causes boot to be done from it, error if all opens fail. - on error a message is displayed, and after 3 second pause the loop is started from begin. The BOOTCONF.SYS is scanned for 0x,=filename, any of these values can be 0 to match everything, preceding 0-s can be omitted, scanning countinues until first match or read error. The boot is processed as follows: vectors 0F1h-0F4h are set to 5774:654E ("Netw"<img src="images/smilies/face-wink.png" align="absmiddle" border="0">, copy of vector 13h, new vector 13h (it is changed to point to code which reads boot image), and "boot terminate" vector, then a "bootsector" is read from boot image (the most recently opened file), sectors per track and number of heads are took from it, and jump to it is done; then read from floppy is serviced by reading the boot image file Boot terminate sends DETACH request, and closes the socket used by the boot (see below why). The boot image is still accessible when IPX driver is loaded by booted system. How? The BootROM contains own "mini-IPX" which on every request checks if real IPX was loaded, and in such a case opens socket (to be able to receive packets), and forwards all requests to the real IPX. This of course works well providing that network adapter will not be accessed until IPX is loaded - true is using IPX.COM containing driver, and usually true if NDIS driver is used - note some NDIS drivers, in spite specification demands they must not do it, initialize adapter when loaded, and cause the boot to fail. How the Novell's BootROM is made? There is some code from Novell, and there is driver code from the network adapter manufacturer, probably they are two .OBJ-s and usual LINK can be used to produce .EXE, then DCONFIG/ECONFIG can be used to configure it (on image w/o .EXE header offsets would not match), and finally EXE2BIN to produce BootROM image.

作者: 不点     时间: 2005-4-19 00:00
现在先只回复 dos@fans1 的问题。GONGXP 的问题比较复杂,待我仔细研读之后再作回复。

&gt; 但是pre7版的grldr就只能把镜像中的这个grub引导到stage1,而看不到选择菜单。

前面我的回复也就是这个意思,这里并无问题。GRLDR 只要能够启动该 IMG,就完成任务了。其余的,我猜想,不是 GRLDR的错误,而是该软盘映象中 GRUB 的错误。有可能是因为该映象中的 GRUB 版本太低造成的。你可以试试把映象中的 GRUB版本升级为最新版,看看如何?如果升级为最新版还是不行,那么就可以确认这真的是一个问题了。

&gt; 但以前版本的grubfordos是能够引导成功的。所以我认为这是这个版本的一个bug。

以前的 0.2.0 版本不支持 --mem 参数,如果你使用了 --mem参数来仿真该映象,这并不代表以前的版本可以引导,因为以前的0.2.0版本根本无此功能。虽然你没有说明,但是,我猜想你已经使用的是带有--mem 的 map 命令,否则,如果不带 --mem 都出现这样的错误,那可真的是一个 BUG了。究竟是怎样的情况,还需你给以详细说明。在使用了 --mem 的情况下,这不能算做 GRLDR 的问题,而应当归咎于映象中的 GRUB不支持 int15/e820 内存规范(前面笔误,写成了int13/e820, 应当是 int15 才对)。

--mem 代表的是一个全新的软件,不能拿旧版本的 0.2.0 来对比。

我现在找不到超级DOS启动盘的下载地址,你可以给一个下载地址。不过我下载和你下载是一样的,都是测试。我相信你的报告,所以,其实我也没必要下载它。

我非常相信目前的 GRLDR 不会有问题,如果以前的 GRLDR 可以干什么,那么现在的也可以干同样的事情。以前的 GRLDR 不支持--mem ,现在的支持了 --mem ,这一点,一定要区分开来。如果要公平的对比,那就得都不用 --mem 才行,否则,一个使用了--mem,一个不使用 --mem,这样的对比是没有意义的。谢谢你的报告,如果有问题,请继续讨论。


作者: 不点     时间: 2005-4-19 00:00
GONGXP:

&gt; rpl远程启动后,系统a:盘指向服务器软盘镜像文件,占用100多k常规内存

这就坏了。常规内存是非常宝贵的,随便就占用这么多的常规内存,会带来很多潜在的问题。

在 BIOS 将控制权交给操作系统的引导程序之前,BIOS 对常规内存的占用,都限定为 extended bios data area这个空间。这个空间不能太大,一般只有 1K,多的,也可能有 4K。虽然这里没有明文规定,但是,超过 4K 的,是罕见的,而超过8K,就可能引起问题了。这段空间位于常规内存的顶部。我认为,BIOS程序将自己挪动到常规内存,是一种“不良行为”。一个设计良好的程序,绝不应当是这样的。

&gt; 运行微软提供的一个28字节的nwrpltrm.com后,系统a:盘指向本机a:盘,rpl占用内存基本释放,这时也不能启动grub.exe。

此时 int13 的中断入口地址仍然可能是在常规内存,因此,grub.exe 拒绝运行。

另外,除了 int13 以外,也许其它一些重要的中断也被更动过了。GRUB 因此都会拒绝运行的。

微软的 28 字节的 nwrpltrm.com 程序,并未还给 DOS 一个干净的环境。一个理想的程序,应当是,当它执行以后,就像网络 BIOS 根本不曾存在过那样,也就是说,真正干净地恢复内存中的中断向量(以及 BIOS 数据区)。

你可以尝试重新写一个程序,也就是 nwrpltrm.com 的增强版,来达到上述要求。

将来我们的 grub for dos 也可能进行更多智能的探测,来寻找真正的 BIOS 中断服务程序的入口地址,这样就有可能不再需要 nwrpltrm.com 这样的程序了。但现在恐怕还是需要你自己做这些工作了。

大致上我的看法就是这样,虽然这些英文资料还没有来得及细看。


作者: areyong     时间: 2005-4-20 00:00    标题: 有关GRUB4DOS,报告及请求帮助。
有关GRUB4DOS,报告及请求帮助。

我使用 GRUB FOR DOS ,这个程序非常好,非常实用。
然而我有一个特别的需求,不知道您能否帮帮我。
一:我的电脑是无盘的(无光驱,无软驱,无硬盘,无U盘)。现在通过启动芯片启动了
无盘DOS。
二:启动无盘DOS之后,我通用xmsdsk.com在内存虚拟了一个内存盘,如J:盘,
它的大小为2.88M
三:通过加载网络驱动之后,我把一个启动映象文件(如SYS.IMG)拷到了无
盘DOS的内存虚拟盘J:盘中.同时,也把GRUB的所有相关文件拷到J:盘中。
四:在无盘DOS中,我卸载了所有网卡驱动及内存中其它的TSR程序。此时无盘机器里是一个干净的DOS。
五:我现在需要:
用内存盘J:盘里的GRUB,来调用J:盘里的SYS.IMG,让它模拟A盘或B盘来启动。
请问如何处理???
这个问题的关键就是,在GRUB4DOS中,如何定位xmsdsk内存盘中的文件。
一定要帮帮我,多谢!!!!!!!!
我的EMAIL:
nullren@zj.com

作者: areyong     时间: 2005-4-20 00:00    标题: 11
补充说明及想法:



在无盘DOS中,我卸载了所有网卡驱动及内存中其它的TSR程序。(但保留了xmsdsk.com)。现在相当于有一个干净的DOS环境。



一:在有硬盘的情况下,在启动DOS之后,启动XMSDSK来虚拟软盘之后,可以正常运行GRUB。xmsdsk用内盘来虚拟硬盘的时候,也可以指定
cluster size的。同时,它也支持把虚拟盘定位安装到 top of xms memory
.(当然,运行XMSDSK之前,需要加载HIMEM.SYS才行。)



二:xmsdsk.com虚拟了一个内存盘,而我也已把SYS.IMG拷到了这个内存盘之中了。

:grub是基于BIOS上运行的,那grub在运行时,扩展内存里的内容是否是不变的。bios能读到XMS内存里的内容吧?如果能读到,那么,我们只要能定位虚拟内存盘中的sys.img文件在内存的位置就好办了。但是我不会写。



四:不点大侠应该也可以在内存里把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。



五:无盘启动我是用BOOTP启动芯片来启动的,启动之后,会仿真一个A:盘,这个A盘在DOS下是可以读写的。在DOS下,用一个rdrm.com(很小的,一百多个字节),可以退出BOOTP启动芯片的程序,还原真实的软驱盘。它这个退出很干净。



六:如果能实现以上的功能,GRUB将会有巨大的应用,它能让真正
的无盘终端设备(无硬盘软盘光盘U盘CF卡)仅仅通过启动芯片用非网络映射的方式启动自已想要的操作系统(
XP等除外但可以也用它做工具另外开发驱动进而做出来),或者启动其它的基于BIOS上开发的控制程序等等。



七:强烈建议:不点大侠能把 grub --mem 这个参数对内存容量的参数放低,我想把GRUB用到比较陈旧但现在还在使用的工控机中去,它们的内存通常只有16M。



八:bootp的资料在LINUX站中有介绍。bootp的启动芯片是从 http://rom-o-matic.net/
下载的。退出BOOTP芯片程序还原真实的A盘的程序 rdrm.com 在这里有下载
http://daan.jsphome.com/temp/rdrm.com




作者: 不点     时间: 2005-4-20 00:00
看来都在关心网络启动相关的问题。也许 GRUB for DOS 又将迎来一个新的应用推广了。谢谢 areyong。

根据 areyong 的描述,这个从网络启动的无盘 DOS,是能够顺利运行 grub.exe 的。这个很关键,否则我们可能就要遇到像 GONGXP 所说的那种问题了。下面就有关的问题谈谈我的看法。

&gt; grub是基于BIOS上运行的,那grub在运行时,扩展内存里的内容是否是不变的。bios能读到XMS内存里的内容吧?如果能读到,那么,我们只要能定位虚拟内存盘中的sys.img文件在内存的位置就好办了。但是我不会写。

grub.exe 从 DOS 下运行,此时,扩展内存不受影响,仍然保持 DOS 运行时的内容。是的,bios可以读到扩展物理内存里的内容。不过,BIOS 不认识 XMS 规范,这个规范似乎是微软参与制定的,专门用来让 DOS访问扩展内存的。这个规范对于 BIOS 没什么用处。BIOS 访问扩展内存是使用 int15/eax=e820h, int15/ax=88h,int15/ax=87h 等等这些规范。

&gt; 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。

只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 BIOS 可以识别的磁盘号码(硬盘或者软盘)。

&gt; 无盘启动我是用BOOTP启动芯片来启动的,启动之后,会仿真一个A:盘,这个A盘在DOS下是可以读写的。在DOS下,用一个rdrm.com(很小的,一百多个字节),可以退出BOOTP启动芯片的程序,还原真实的软驱盘。它这个退出很干净。

GRUB.EXE 并非要求一定得还原真实的软驱。GRUB.EXE 所要求的,是 int13 等等这类关键中断服务程序的入口地址,必须是在ROM 中(不低于C000:0000的空间),而不是在常规内存中。只要能保证这个,那么,grub.exe 就会顺利运行。如果不是在 ROM中,那么 grub.exe 也会尝试查找 ROM 中的入口地址,找到之后也让 grub.exe 顺利运行,找不到则退出并报告失败。

&gt; 把 grub --mem 这个参数对内存容量的参数放低,我想把GRUB用到比较陈旧但现在还在使用的工控机中去,它们的内存通常只有16M。

--mem 现在对内存容量毫无限制,即使只有 2M 的内存,也可以用顶端的 1M 来仿真一个软盘。不过,如果你的机器太老,它可能不支持int15/eax=e820h 这个比较新的内存规范。这个规范是 Pheonix首先使用的,现在已经成了事实工业标准,已经被所有新型的硬软件所支持了。不过,既然有人需要这个功能,那么我会记住,将来在适当的时候,如果方便的话,也可以考虑支持旧的内存规范。目前而言,不支持 这个 E820 规范的硬件和软件,都不能在 grub for dos 下正常工作。



作者: GONGXP     时间: 2005-4-20 00:00
areyong描述的xmsdsk.exe中,加/t参数,可以在dos下直接loadce.exe运行
windows ce,可能也能loadlin.exe运行linux,但是不知是否有loadXP?
不知比尔.盖茨先生受了什么刺激,非要将dos赶尽杀绝。如果不点大侠的gurb.exe
能够在这些“污染”了bios的dos中有更多的适应性,善莫大焉。

作者: Gandalf     时间: 2005-4-20 00:00
不点,及诸位:
------------------------------------------------------------- 面对这两个无盘启动的问题,我道有个想法。 既然,常规内存一定是要被“污染”,就是中断向量,Grub.exe 又必须使用和拒绝被污染了的中断向量,那么为什么不可以在恰当的时候保存一份“未被污染”的 I-Vectors 呢? 也就 0x600 的空间嘛。然后在无盘服务其上放置一份可是用此 I-Vectors 的 Grub.exe 不就可以了吗? 当然,我们在这个地方,也可以这么认为,即, rpl 的修改是善意的。如果,我们在Grub.exe 的内部采取信任的方式,岂不能通过修改过了的 INT13h 访问无盘服务器上的FDD img 了那? 此外,似乎, Grub 在编译好了以后,就可以支持网络启动,甚至是无盘启动的。

作者: areyong     时间: 2005-4-20 00:00    标题: 回复:
&gt; 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。

&gt;只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 BIOS 可以识别的磁盘号码(硬盘或者软盘)。



我们可以这样,我们编一个在DOS下执行的程序,把xmsdsk.com生成的内存虚拟盘中的SYS.IMG这个文件推入到我们指定的内存段中,这个是在 DOS执行的,不是基于BIOS,也不用考虑XMS规则的问题,(先假定这个SYS.IMG文件比较小,比如说它只有256K,因为我现在暂时需要的应用,有256K就够了)。

然后再启用GRUB,让它告诉BIOS,模拟我们先指定的内存段为一个硬盘或软盘。

我不会编程,但我很想很快就拥有此功能。。。。。不点请帮忙。



我已经在BOOTP无盘dos的环境下测试过了,可以正常运行GRUB,而且,即使不退出BOOTP的环境,也就是说BOOTP所虚拟出来的A盘还存在的情况下,可以用GRUB的这些功能:

chainloader (fd0)+1

rootnoverify (fd0)

boot 这样仍然可以启动DOS,只是启动之后找不到COMMAND.COM (因为虚拟盘消失了,找不到COMMAND了),也就是说GRUB 可以读到虚拟的A盘。



但是以下这样就不成功,表现为死机:(我已在虚拟A盘中拷了一个SYS.IMG)

map (fd0)/sys.img (hd0,0) 或者 map (fd0)/sys.img (fd1) 都死机


作者: windrv     时间: 2005-4-21 00:00
以下是引用areyong在2005-4-20 23:57:37的发言:
&gt; 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。

&gt;只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 BIOS 可以识别的磁盘号码(硬盘或者软盘)。



我们可以这样,我们编一个在DOS下执行的程序,把xmsdsk.com生成的内存虚拟盘中的SYS.IMG这个文件推入到我们指定的内存段中,这个是在 DOS执行的,不是基于BIOS,也不用考虑XMS规则的问题,(先假定这个SYS.IMG文件比较小,比如说它只有256K,因为我现在暂时需要的应用,有256K就够了)。

然后再启用GRUB,让它告诉BIOS,模拟我们先指定的内存段为一个硬盘或软盘。

我不会编程,但我很想很快就拥有此功能。。。。。不点请帮忙。



我已经在BOOTP无盘dos的环境下测试过了,可以正常运行GRUB,而且,即使不退出BOOTP的环境,也就是说BOOTP所虚拟出来的A盘还存在的情况下,可以用GRUB的这些功能:

chainloader (fd0)+1

rootnoverify (fd0)

boot 这样仍然可以启动DOS,只是启动之后找不到COMMAND.COM (因为虚拟盘消失了,找不到COMMAND了),也就是说GRUB 可以读到虚拟的A盘。



但是以下这样就不成功,表现为死机:(我已在虚拟A盘中拷了一个SYS.IMG)

map (fd0)/sys.img (hd0,0) 或者 map (fd0)/sys.img (fd1) 都死机




Don't bother the trouble!
We could do it by:
1. loading the first DOS system by pxegrub or nbgrub with memdisk
2. using GRUB.EXE to load once again the second dos image file
on the virtual memdisk drive (A: or C<img src="images/smilies/face-laugh.png" align="absmiddle" border="0"> formed by the first dos system
either
a. as memdisk again
or
b. as etherboot dos image file, nbi image file
(Bean has worked out a version of GRUB that can load etherboot dos image file as well.)

作者: 不点     时间: 2005-4-21 00:00
Gandalf: 这个问题我在开发 grub for dos 0.0.1的时候就已经考虑过了,表面上看是可行的,实际上存在很多问题,结论是不太可行,或者是不太合适。比如,同一台机器,当从硬盘启动的时候,int13的中断服务入口地址,与当从光盘启动的时候,其 int13 的中断服务入口地址,可能是不同的。虽然它们都是合法的 ROM地址,但是,不同的启动方法,导致中断向量表和BIOS数据区(以及扩展的BIOS数据区)是不同的。因此,这种办法,本质上是不可靠的。另外还有其它一些问题,导致这一方法根本上不实用。

对于刚才areyong的问题,windrv 所说的方法大概是可行的。不过下面我也就 areyong 的问题说说我的意见。

看这段:
-----------------------------
我已经在BOOTP无盘dos的环境下测试过了,可以正常运行GRUB,而且,即使不退出BOOTP的环境,也就是说BOOTP所虚拟出来的A盘还存在的情况下,可以用GRUB的这些功能:
chainloader (fd0)+1
rootnoverify (fd0)
boot 这样仍然可以启动DOS,只是启动之后找不到COMMAND.COM (因为虚拟盘消失了,找不到COMMAND了),也就是说GRUB 可以读到虚拟的A盘。
----------------------------------------
我想说的是,虚拟盘为何会突然消失呢?难道 GRUB.exe 撤销了你的虚拟盘?

假如你的虚拟盘不消失的话,你就可以在 GRUB 下访问你的 SYS.IMG 了,你也就不存在任何困难了,你只要用 --mem 启动仿真就万事大吉了。

虚拟盘的消失,可能是你的这个 BIOS 不够完善的一个表现,正如 GONGXP 的 BIOS 不很完美一样。

进一步理解这个问题,我想用类比的方法来解释。我们知道,CDROM和USB有着相似性,它们对于软盘的仿真,都是把int13对于软盘的处理,定向到自己的介质。对于 CDROM,定向到 CD 介质,对于 USB 盘,定向到 USB介质。你现在的网络的情况,也应当这么处理才对,至少这么处理是比较完美的,不会出现问题。也就是说,把int13对于软盘的访问,直接定向到网络介质。

所以,最终需要完善的,不是别的,正是你的网络 BIOS。

另外,如果要编写你说的这些程序,恐怕不是那么容易的,应当需要一个过程。这问题理论上是可以解决的,但是,要真的去解决,还得有条件才行,需要对各个细节都了解,而这是需要一个过程的。我这里没有这些条件,因此很难解决你的问题了。


作者: hnlyzhd     时间: 2005-4-21 00:00
to 不点:我学得你真的有必要弄个留言簿或者其他的快速度联系方法。1.对GRUB来说在ROM中运行应该可以的吧,就像ROMOS的FREEDOS在BIOS中运行一样,GRUB在BIOS层工作,应该可以做出个GRUB.BIN或GRUB.ROM在主板ROM中运行。2.就是上次我说的BIOS中的PCI模块问题,目前来说BIOS的PCI或ISA模块的软件模拟器是一个空白,但是如果用GRUB的CHAINLOADER来运行它应该没有技术的难度吧,当然我只是一个想像而已。如果你需要这个模块,我可以提供给你来测试它。3.不知现在的GRLDR能否自身复制并安装到MBR上呢?

作者: hnlyzhd     时间: 2005-4-21 00:00
TO 不点:1.现有的GRLDR能否实现复制自身启动代码到MBR呢,还有上次我说的启动时的热键问题,最好能指定一个热键,时间有一秒就够了,不能等太长时间,任意键也不安全。如果没有热键来激活每次都会出现GRUB菜单的。2.对于 GRUB从ROM中运行,我觉得应该可以的,就像ROMOS的FREEDOS在BIOS中启动一样。3.GRUB的CHAINLOADER能否启动BIOS中的PCI模块呢,在这方面来说BIOS的模拟器还是一个空白。如果需要相应模块,我可以提供给你,包括DOS和硬盘保护模块。

作者: areyong     时间: 2005-4-21 00:00    标题: 回复
多谢WINDRV及不点!!
WINDRV的方法还没有测试。等测试之后再回答。
不点:
其实我要用GRUB的主要目的,就是GRUB能恢复被DOS污染了的BIOS环境。还原到一个真实的BIOS环境。因为我要启动的程序,可能就是基于BIOS上运行的(而不是基于DOS上运行的)。然而,我的电脑是无盘,必须先从网卡ROM启动,而网卡ROM的代码也会污染BIOS环境的。
我的设想是这样:用网卡ROM启动无盘电脑,启动无盘DOS,在DOS下加载网卡驱动后,把我需要启动的sys.img下载到DOS中的虚拟内存盘中(XMSDSK虚拟出来的内存盘)。然后,我用一个DOS程序来退出网卡ROM的代码,这个程序是现成的,已经过测试的。
此时,无盘机的状态是:已启动了DOS,DOS文件放成内存盘(XMSDSK虚拟出来的)中,而且这个DOS是个相对干净的DOS,(因为网卡启动代码已被我的退出程序退出了).这时DOS中也已经没有网卡启动代码所虚拟出来的A盘了。
在这种情况下,我需要用GRUB,来调用DOS内存虚拟盘中的sys.img,模拟启动。

不点:要是你有时间,可以有环境测试的,这样:你用有盘启动一个DOS,并具加载XMSDSK,让它模拟一个DOS内存虚拟盘,然后你拷一个FLOPPY.IMG到这个内存盘中。这样环境就好了,现在要做的是:
1:编个DOS程序,把XMSDSK内存盘里的FLOPPY.IMG推到你指定的物理内存之中。
2:把你刚才指定的物理内存虚拟成一个硬盘并告诉BIOS
3:用GRUB调用这个刚生成硬盘,并从它启动。或者调用这个里面的FLOPPY.IMG并启动。
4:完成。
也就是说,我的要求与是不是曾经用无盘启动芯片启动过无关,因为我可以在DOS中,把启动芯片程序退出来,就相当于没有用过无盘启动一样。
例如,我用启动光盘启动了一个DOS,此时会生成一个虚拟的A盘,同时,我又加载XMSDSK,生成一个虚拟的DOS内存盘,之后,假设我运行一个DOS程序,把启动光盘的控制代码退出,启动光盘所生成的虚拟A盘自然就消失了。这时,我的电脑就相当于是正常有盘启动一样,相当于不曾用光盘启动过。在这种情况下,我还需要用GRUB,来调用DOS内存盘(xmsdsk生成的)里的FLOPPY.IMG。但是,GRUB无法指向DOS的内存虚拟盘,GRUB不支持MAP J:\FLOPPY.IMG (FD0) 这个格式,所以,我们需要用另外的程序,把这个内存盘里的FLOPPY.img推到我们指定的物理内存段中,然后再把这个物理内存段虚拟成硬盘并从它启动。或者调用这个里面的FLOPPY.IMG再启动。---------当然这只是一个例子,事实上我们没有一个把启动光盘的控制代码退出的程序,但是我们有把启动芯片的控制代码退出的程序。

作者: 不点     时间: 2005-4-21 00:00

hnlyzhd:
1.现有的GRLDR能否实现复制自身启动代码到MBR呢,还有上次我说的启动时的热键问题,最好能指定一个热键,时间有一秒就够了,不能等太长时间,任意键也不安全。如果没有热键来激活每次都会出现GRUB菜单的。启动时,肯定得有一段等待时间,如果没有的话,你还没来得及按你的热键,就已经进入下一步了。这段等待时间是 5 秒,应当说是比较合理的。如果只有一秒,也会容易造成按键太慢而无效。
现在,GRLDR 第三个字节默认是 0x80 ,也就是禁止了优先启动 previous MBR 的功能。要打开这个功能,必须手动将 GRLDR 的第三个字节变成 0. 这段程序虽然简单,但也够用了。想要优先启动 previous MBR 的人是少数,想要优先启动 GRLDR 的人是多数,所以,默认值照顾想要优先启动 GRLDR 的人。
如果按照你所说, 不用等待时间,而用热键,那么,要么你在程序运行之前来不及抢先按到热键,要么你过早地按了热键,此时,有些 BIOS 认为键盘操作失败,认为键盘失灵,强制锁住不运行了。所以,像目前这样给出提示比较好,你看到提示就按任意键,这是安全的。GRLDR 写入 MBR 的安装命令,就再等待一下吧。我考虑了,这在支持了LINUX分区之后实现比较合适,那时候可以通盘考虑这一问题。如果现在就做,到时候可能还得修正,比较费劲。
2.对于 GRUB从ROM中运行,我觉得应该可以的,就像ROMOS的FREEDOS在BIOS中启动一样。我觉得不太可行,也不太必要。我们可不是 ROM 生产厂家,还是让 ROM 厂家来做吧。不过,即使 ROM 厂家,应当也不容易,因为 GRUB 的体积太大了。
3.GRUB的CHAINLOADER能否启动BIOS中的PCI模块呢,在这方面来说BIOS的模拟器还是一个空白。如果需要相应模块,我可以提供给你,包括DOS和硬盘保护模块。
不太明白你这里所说的意思。启动这些模块,不知道有什么用。按道理来说,ROM 模块只能由 BIOS统一调用,当进入用户程序之后,就不应当再调用 ROM 模块了,因为 ROM 模块本来就没有设计成让用户来调用的。在 GRUB接管控制的时刻,BIOS 的启动已经完成,用户程序已经开始。所有的 ROM 模块都已经完成了它的初始化,并把相关信息记录到了中断向量表,BIOS 数据区,以及扩展的 BIOS 数据区,因此也无需重复执行它了,或者说,重复执行可能还会造成冲突。当然在 GRUB之下,你确实可以执行任意的命令,但是,你总得知道你要执行的命令的内存地址才行,也就是说,你想要执行的 JMP跳转指令的目的地是在哪里。如果你能确定这个,那么,用 GRUB 实现它,是轻而易举的。


作者: 不点     时间: 2005-4-21 00:00
areyong:
终于明白了你的意思。我现在还没有明确的思路,只有一些直觉上初步的看法,陈述如下。

根据你的描述,你此时可以在 DOS 下访问你的虚拟盘,以及其中的 SYS.IMG文件。但是,有个重要的问题,不知你注意过没有,就是,这个内存盘在物理内存中的位置,未必是连续的。第二个问题,该内存盘占据的物理内存地址,究竟在哪里?如果这两点不能确定,恐怕我们也就没有后续手段了。

假定在最理想的情况下,该内存盘所占据的物理内存空间是连续的一整块,而且正好占据物理内存的最顶端,那么在这种情况下,我们或许能够比较容易地给GRUB.EXE 增加某些个参数,用来传递内存盘的地址,这样也就可以在 GRUB 下访问到该内存盘里面的任意文件包括(sys.img文件)了。

如果太复杂,我们可能就不容易做了。

作者: areyong     时间: 2005-4-21 00:00    标题: 回复:
++++++++++++++++++++++++++++++++++++++++++++

不太明白你这里所说的意思。启动这些模块,不知道有什么用。按道理来说,ROM 模块只能由 BIOS统一调用,当进入用户程序之后,就不应当再调用
ROM 模块了,因为 ROM 模块本来就没有设计成让用户来调用的。在 GRUB接管控制的时刻,BIOS
的启动已经完成,用户程序已经开始。所有的ROM 模块都已经完成了它的初始化,并把相关信息记录到了中断向量表,BIOS
数据区,以及扩展的BIOS 数据区,因此也无需重复执行它了,或者说,重复执行可能还会造成冲突。当然在
GRUB之下,你确实可以执行任意的命令,但是,你总得知道你要执行的命令的内存地址才行,也就是说,你想要执行的
JMP跳转指令的目的地是在哪里。如果你能确定这个,那么,用 GRUB 实现它,是轻而易举的。

++++++++++++++++++++++++++++++++++++++++++++++

BIOS的PCI标准的ROM模块,一般是BIOS在初始化之后,如果找到了合符标准的ROM模块,则把这个ROM模块调入到内存0000:d800处,
(以32K为单位吧???我不太清楚),然后,BIOS来了个跳转,jmp 0000:d800,把控制权交给ROM。大致如此吧。 BIOS
数据区,以及扩展的BIOS 数据区等不用管它吧。





++++++++++++++++++++++++++++++++++++++++++++++

假定在最理想的情况下,该内存盘所占据的物理内存空间是连续的一整块,而且正好占据物理内存的最顶端,那么在这种情况下,我们或许能够比较容易地给
GRUB.EXE 增加某些个参数,用来传递内存盘的地址,这样也就可以在 GRUB 下访问到该内存盘里面的任意文件包括(sys.img文件)了。

+++++++++++++++++++++++++++++++++++++++++++++++

你知道,我们已经在DOS下,能读到XMSDSK内存盘里的SYS.IMG文件了,我们不需要去管这个文件在物理内存空间里是不是连在一起,我们可以在DOS下编个程序,强行把sys.img推到我们自已定义的物理内存空里,而且是连续的,不就行了。



另:我已用WINDRV所说的方法,用带网络功能的GRUB,来实现了我先前的要求。我很高兴!

但这个带网络功能的GRUB,是基于GRUB4DOS 0.2.0版本的,没有“--MEM”这个功能。略有遗憾。



还有一个小问题,用GRUB之后,启动WINXP之后,WINXP就会发现两个软驱,但都用不了。表现为软驱灯闪一下之后,就说软盘没有格式化,其实软盘是好的。不知道用GRUB启动WIN9X之后,还可不可以用软驱?有没有好的解决办法?

作者: 不点     时间: 2005-4-22 00:00
&gt; 但这个带网络功能的GRUB,是基于GRUB4DOS 0.2.0版本的,没有“--MEM”这个功能。略有遗憾。

不要紧,在 0.2.0 之下,你可以用 memdisk 的方法来实现和 --mem 类似的功能。

&gt; 我们不需要去管这个文件在物理内存空间里是不是连在一起,我们可以在DOS下编个程序,强行把sys.img推到我们自已定义的物理内存空里,而且是连续的,不就行了。

关键是,在 DOS 下,可能根本无法编程达到你的目的。你要是不知道由 xmsdsk 虚拟出来的内存盘的物理地址,你有可能在拷贝 sys.img 到你所确定的目的地这一过程中,覆盖掉虚拟盘,从而使得拷贝归于失败。

另外还有一个问题,就是,XMS内存,有可能不等于物理内存。XMS所访问到的最大内存,不一定等于物理的最大内存。这恐怕是两个很不相同的概念。如果你能确定 XMS内存和物理内存是一回事,那么可能就好办一些。如果它们不是一回事,那么,你就很难把 SYS.IMG 拷贝到物理内存中指定的地址处。

既然你的问题已经通过别的途径解决了,那么我认为,这个讨论也就不用再继续了。正如上面所说,虽然表面上看,该问题不难解决,但实际上,要解决它,还有不少困难需要克服。表面上看,我们不用去了解 XMS 规范的细节,实际上,由于涉及到内存操作,因此不了解 XMS 规范是不行的。如果要处理 XMS规范,这个问题就不能算做简单的问题了,我们也没有必要费这么大的劲去获得这么一个可有可无的功能。

&gt; 用GRUB之后,启动WINXP之后,WINXP就会发现两个软驱,但都用不了。

用 GRUB 虚拟磁盘之后,XP 不承认虚拟盘的,XP 不承认实模式下的一切东西,而 GRUB 的虚拟恰恰就是一个实模式的概念。XP的任何行为,都是 XP 自己的事情,与 GRUB 无关。既然已经知道 XP 不接受实模式的东西,所以,在 GRUB下实施的仿真,明确地不支持 XP。

在 win98 下,由 --mem 所仿真的磁盘是可以安全访问的。由不带 ----mem 所进行的仿真,可能会带来严重问题,比如,导致整个磁盘数据的全部丢失,都是有可能的。这在 readme 文件中已经提醒过了。

win98 下访问软驱是没问题的。


作者: hnlyzhd     时间: 2005-4-25 00:00
T不点
我已经想了多种方法,在BIOS中加入GRUB来实现它,GRUB真是个不错的东东。
你那个QLINUX的IMG它不能够寻找硬盘上的GRLDR文件,如果你能做一个IMG,把你现有的GRLDR的前八个扇区做到IMG 的启动扇中,可以寻找硬盘上的GRLDR的话,我自可以用其他方法生成BIN文件加入ROM中,第二种方法是,你如果有时间做一个精简的GRLDR放入IMG中,这样最好,可以不要硬盘上的文件,用ROM就可以单独启动到GRUB。IMG大小不能卖过64K。

作者: 不点     时间: 2005-4-25 00:00
&gt; 你那个QLINUX的IMG它不能够寻找硬盘上的GRLDR文件,如果你能做一个IMG,
&gt; 把你现有的GRLDR的前八个扇区做到IMG 的启动扇中,可以寻找硬盘上的GRLDR的话,
&gt; 我自可以用其他方法生成BIN文件加入ROM中

软盘的映像当然无法做到了,因为软盘只有一个扇区,也就是第一扇区可以存放引导文件。你需要的是8个扇区或者更多。因此,要达到这个目的,需要的是一个硬盘映象。你制作一个硬盘映象文件,注意它的每磁道的扇区数不能少于8。然后,你按照 http://grub.linuxeden.com/中的方法,把GRLDR写入该“硬盘”,就成了一个硬盘映象了。

另外,如果你只是想利用这8个扇区的话,那么你无需借助于任何硬盘映象或者软盘映象。你只要将这 8 个扇区装载到 0000:7C00,并用 jmp跳转到这里执行,这就可以查找硬盘和软盘上的 GRLDR 文件了,非常简单,你完全可以在 ROM 中实现这个,因为这只占用 8 个扇区的 ROM空间,也就是 4K,很少的。


&gt; 第二种方法是,你如果有时间做一个精简的GRLDR放入IMG中,这样最好,可以不要硬盘上的文件,
&gt; 用ROM就可以单独启动到GRUB。IMG大小不能卖过64K。
这个可不那么容易了。光是那十多种文件系统的驱动程序,都要占用 80K的空间,更不用说还有别的了。要想大幅减少这段程序的空间占用,必须全部使用汇编语言,但这又是一个庞大的工程了,而且,这可不是一般的困难,而是非常困难的(在我看来),我想,这是没人愿意去做的。


作者: hnlyzhd     时间: 2005-4-26 00:00
TO 不点兄:那么咱们就说别的吧,关于那个骂你的人,我已经回复了,你大可不必那样和他计较,还是我说的,如果一天你在路上被狗咬了,你会和它计较吗?偶已经习惯了!关于下一个GRUB的构思,我简单说一下,如果有可能的话加入,文件列表,文件及文件夹拷贝和删除,以及隐藏和反隐藏最后分区也就是所谓的硬盘高端分区,这几个命令不知有没有实现的可能性,如果这样可以实现对于GRUB来说是个大的发展。我在静候佳音。

作者: Esme     时间: 2005-4-26 00:00
EZBOOT可以生成有24位真彩启动画面的ISO,这个功能是如何实现的呢,如何在不需要显卡驱动的前提下正确的现实了24位色,好像是个不错的功能,如果镶入到MSDOS 7.1里,让24位色启动画面贯穿开机的全过程,直到config和autoexec执行完毕,那多棒啊,我觉得有必要考虑DOS系统的美观情况

作者: Esme     时间: 2005-4-26 00:00
areyong,我觉得你的设想完全可以用 -mem 参数解决,没必要非要用虚拟的内存盘你把你那个网络bios里的grub换成0.4.0以后的版本不就ok了吗,好像换一下不是很难吧

作者: gmy     时间: 2005-4-26 00:00
许多软件的版本都是在首次发布后一年之内达到最佳状态,之后体积越来越大,多余的功能越来越多,核心功能倒退。如ACDSee为何在7.0出来之后,又推出了传统版2.44?这是教训,也是经验,希望 不点 时时审视自己和GRUB FOR DOS, 因为你是让我对LINUX有好感的第一人,大家也喜欢你,不要骄傲啊。目前我仅用0.2 ,因为0.4增加的功能一个让我心动的也没有(说实话),也可能你的思维太超前了,我还没有反应过来。

作者: Esme     时间: 2005-4-27 00:00
gmy,0.4版本比0.2版本要安全多了,你难道没发现?新增的 -mem 是破坏硬盘的可能大大降低,虽然0.2也可以借助 memdisk,但还要再增加这个文件,如果grldr本身就有这个功能,不是很好的事情吗,而且体积并没有增加,我觉得这是质的飞跃

作者: 不点     时间: 2005-4-27 00:00
有关GRUB for DOS的开发,谢谢兄弟们的意见和建议。我清楚地记得,grub4dos 0.0.x 的版本,就受到很多关注了。由于Wengier 把它介绍给 FreeDOS 等国外网站,使得关注它的人也延伸到了国外。GRLDR的加入,是很晚的事情了,最初是一位兄弟的建议,好像这位兄弟也是本论坛的会员。在他建议的时候,我还不能确定会开发成功。不过现在,GRLDR已经成为很重要的方面了,其重要性甚至超过 grub.exe。论坛中的许多人都对 grub4dos 的开发做出了贡献,有些人的名字已经写入了Changelog 之中,有些则根本没有提及。可以说,grub4dos 是大家的,我也只是其中的一位。当然这是 GPL 的性质所决定的了,“联合DOS论坛”也是提倡这种精神的。

不同的人使用 grub4dos 的目的也不同。那些 Linux 使用者,可能不太关心Grub4dos,或者虽然关心,但只关心个别简单的功能,比如,他们可能不需要磁盘仿真的功能。有些人只使用 grub.exe,有些人只使用grldr。很自然地,在这些人看来,他所用不到的功能都是多余的。如果他们可以全盘考虑的话,他们就会了解别人可能会有不同于自己的看法。事实上,世界上很难有绝对的“正确”和绝对的“错误”,都是从不同角度的不同观点和感受而已。大家多一些互相理解,那么这对于grub4dos或许是很有好处的。grub4dos是大家的,大家都希望它好。如果把大家比作一个“家庭”的话,那么 grub4dos就像是一锅饭(或一盘菜),有的人喜欢多放一些盐,有些人则喜欢淡一些。不可能做到让每个人都很满意,最多只能照顾多数,因此需要让我们当中的一些人,牺牲自己的需要,来满足别人的需要。微软这么大的公司,生产出的 WinXP 也不一定适合所有的人,有些人还要用 DOS/WIn98/WIn2000。

任何软件,它可改进的地方可能都很多。我们优先开发什么,这里面有个取舍,另外,还有一个开发难度、以及开发者的个人特长、爱好等等问题。还有一点,我们是基于 GNU GRUB 的,有些适合 GNU 去解决的问题,就不太适合由我们来解决。

当然,大家提建议,这本身就是对这一软件的承认、鞭策和促进,其目的还是希望这个软件能够更好。gmy对我本人有些过奖了,不必如此夸张,如此客气,努力是大家的,我也会更尽力。谢谢诸位。

作者: wangsea     时间: 2005-4-27 00:00
请教不点: 能否开发一个精简的Gurb版本,功能:Grub XXX.img 命令行功能的版本(不需要menu.lst),如果可能的话,最好是.com,这样内嵌Grubfordos方便一些。 这样可能更利于Grubfordos的推广(因为大家都可以在自已的程序中直接调用它来完成Grub的功能了)。

作者: Gandalf     时间: 2005-4-27 00:00
我到有两个想法: - 从 Avldr.exe 的构架来说, 他可以实现 FAT1x/FAT32/NTFS/Ext2 分区载入任意大小的文件, 那么他也能够将 memdisk 和 FDD 的磁盘镜像文件按照 grub / syslinux 的方式读取到内存里面, 从而实现虚拟启动; - 而,如果 fdd 磁盘镜像文件较小, 我个人觉得,用 Grub4DOS 的 map 也可以 实现. 毕竟, 低端内存只有 640KB, 如果用上压缩技术, 估计 1.44 MB 的磁盘也都比较困难. 此外, 我们似乎可以"投机"一下,作一个类似于 NTOSKrnl.exe 的程序, 让 ntldr 从任何位置载入到内存,在保护模式下运行, 他可以包括一个 fdd 镜像的资源,然后进行(多)启动; 不过,这个东东,需要在安装了 NT 系统的机器上使用. 当然,也许我们可以精简载入需要的文件. ;-)

作者: 不点     时间: 2005-4-28 00:00
wangsea:

&gt; 能否开发一个精简的Grub版本

我目前的答复是,不能。原因前面说过,要真正大规模精简,就得转向汇编语言,有可能将 GRUB 精简至 30K 以内。不过,你可以尝鲜 gandalf 新近创作的 avldr.exe。

&gt; 功能:Grub XXX.img 命令行功能的版本(不需要menu.lst)

此处的问题是(前面也曾经提到过),XXX.img 要装入扩展内存的话,有可能失败。如果此时没有 himem等内存管理程序,那么这有可能实现,但是,在有 himem 等内存管理程序存在的情况下,这将变得很复杂,很困难了。也就是说,把 XXX.img拷贝到物理内存的顶端,这个目的恐怕达不到,拷贝过程有可能会失败(比如如果覆盖掉已经分配了的关键的 XMS内存的话)。如果谁能详细研究 XMS等等这些 DOS下的扩展内存规范,能够顺利实现拷贝的话,那么,他就可能制作出你所说的这种工具。我支持有人做,但我没有时间,也没有兴趣做,即使不考虑内存管理程序的影响,我也不想做(我认为其意义不是很大)。

如果你说的是脱离扩展内存,只使用磁盘介质的仿真(相当于没有 --mem 参数),并且假定 XXX.img 是连续的。这样可以实现你的要求,但是,仍然存在下面的问题:

如果你说的是用 grub 命令实现仿真,然后退回到-------原来的------ DOS,那么,这可是在欺骗 DOS,注意 DOS 有时可以被欺骗,有时它不能被欺骗。

如果你的系统中有一个真实的软驱,你用 XXX.img 仿真(fd0)软盘,这是可以欺骗 DOS 的。如果你的系统中有 n 个硬盘,而你用XXX.img 仿真第 n + 1 个硬盘,这恐怕不行,即使你同时修改了 BIOS 数据区中的软盘和硬盘个数字节,也不行。这是因为,DOS在启动时已经确定了磁盘的总数,在启动之后新增加的磁盘,它都可能不承认的。

还有一个问题是,此时很容易死机,我能想到的死机原因,大致有以下两个方面:

1. 如果仿真程序没有处理好 DOS 常规内存的 arena 结构,则 直接就死掉。
2. 如果仿真了当前 DOS 正在使用的磁盘,则当仿真之后 DOS 可能因为找不到原来真实磁盘上的内容而出错,甚至死掉。

有鉴于以上这些复杂的原因,所以,我不主张别人去做这样的开发。当然了,如果确实有 DOS 高手愿意做,那么这些问题可能都会得到解决的,虽然很不容易。


作者: wangsea     时间: 2005-4-28 00:00
不点:
我想可能是我没把意思表达清楚,比如我有一个批处理:menu.bat
grub.exe --config-file=(hd0,0)/test/menu.lst
我的menu.lst是这样的:
timeout 0
default 0
kernel (hd0,0)/test/memdisk.gz
initrd (hd0,0)/test/Grub.zip
boot
上面的批处理的内容仅仅是启动一个仿真的磁盘进入系统(不再退回),所以我想如果能去掉menu.lst(如果俺只是想仿真一个磁盘,不使用Grub的菜单功能,那么何必又要写menu.lst呢?),直接地在命令行输入:grub.exe -mem -fdo xxx.img 多好啊。
既然grubfordos可以在批处理中调用menu.lst直接仿真磁盘,那么命令行直接给参数应该可以的吧?(即便有一些目录路径限制这么做也值得的呀!)

作者: 不点     时间: 2005-4-28 00:00
你的意思是将菜单或者命令直接嵌入到命令行中。这个有点意思,应该可以实现。谢谢你提供此建议。请你关注 grub.exe 的开发。

作者: wangsea     时间: 2005-4-28 00:00
谢谢不点,期待grub的新功能。

作者: gmy     时间: 2005-4-29 00:00
GRUB菜单中加入引导U盘,不知能否做到?关键在于BIOS对U盘引导的支持不规范,有的形同虚设(USB-FDD,USB-HDD,USB-HDD)

作者: GOTOmsdos     时间: 2005-4-30 00:00
有些BIOS不支持从U盘启动,GRUB能不能从U盘启动?(这当然需要在GRUB里事先加载U盘驱动的)
另,GRUB现在能不能支持多光驱?


作者: dato     时间: 2005-4-30 00:00
好像有吧 --enable-preset-menu=FILE
preset a menu file FILE in Stage 2不过要是包含菜单的话,分发给别人,想修改就麻烦了

作者: hnlyzhd     时间: 2005-4-30 00:00
以下是引用gmy在2005-4-29 23:38:13的发言:
GRUB菜单中加入引导U盘,不知能否做到?关键在于BIOS对U盘引导的支持不规范,有的形同虚设(USB-FDD,USB-HDD,USB-HDD)

USB-ZIP是最有希望的一种可以引导的方式,不过有的BIOS不支持GRUB引导,你可以用安装到软盘的方法以,把GRUB安装到U盘,然后测试,我仅在ASUS和IBM的机子上成功启动

作者: GONGXP     时间: 2005-4-30 00:00
还是关于从netware下远程启动的dos(6.22或者7.1)无法使用grub.exe的问题,试过Avldr情况也一样。netware下远程启动的dos改变了bios向量,int19,和int13,不知可否改改善grub for dos, 能够在这些“污染”了bios的dos中使用?

作者: 不点     时间: 2005-4-30 00:00
gmy和GOTOmsdos的U盘/光盘相关问题,本人以前说过,无能力解决。

GONGXP的问题,也许将来我们可以一并解决,但是,现在我本人没有开发计划。将来如果改进我们的探测算法,就可能顺便把该问题解决掉。我本人不会专门为了这一个问题而去着手解决它。探测算法的改进,是一个巨大的变化,有相当大的开发难度,是不会优先开发它的。如果2006年年底时能做好就很不错了。如果你不能等待,你可以自己尝试修改 dosstart.S 来实现你的目的。

作者: hnlyzhd     时间: 2005-5-20 00:00
不点你到哪里去了,常来呀,或者到无忧去呀,好多人在找你呢!

作者: 不点     时间: 2005-5-26 00:00
最近都在搞 wangsea 所提到的 grub.exe 的功能增强。真没想到这很麻烦,有许多困难需要克服,不过现在已经完成,在 0.4.1pre5 中实现了。

具体的实现是这样的:并未给 GRUB.EXE 增加新的命令行参数,而是仍旧沿用旧的 --config-file=FILE 格式,不过,对FILE 有新的解释。当 FILE 是以 左括号 "(" 或者 斜杠"/" 或者加号 "+"开头的时候,就仍旧像以前那样,解释为一个配置文件的名字。当 FILE 不是以上述三个字符之一开头的时候,认为 FILE是命令序列,也就是认为把配置文件的内容直接嵌入到 FILE 处了。注意,写在 FILE处的命令如果多于一条,应当用分号分隔开来,GRUB.EXE 会把“分号”自动转换成“换行符”,然后才交给 GRUB 的主程序。最好在 FILE的两边加上双引号。举例如下:

grub.exe --config-file="root (hd0,0);chainloader +1"

你注意到最后的一条 boot 命令是可以省略的。你甚至可以用

grub.exe --config-file="halt"

来关机,或者用

grub.exe --config-file="reboot"

来重启动机器。

也就是说,在 FILE 的位置,你可以填入任何 GRUB 可以识别的命令。


作者: Gandalf     时间: 2005-5-26 00:00
支持不点提供的新功能! 也就是说,可以从命令行载入 FDD image 了! ^_^,太好了。

作者: wangsea     时间: 2005-5-26 00:00
感谢不点,在第一页提供的Grub地址中下吗?真有些迫不及待想试啦。有个建议: 能不能单独开发一个版本的grubfordos或是gurb带上某个参数后就可实现默认启动与grubfordos同一目录的img,不用填写root (hd0,0)这样的绝对磁盘路径(让程序来完成这个操作)。如果路径指定失败,返回一个错误提示后不再启动Gurb, 感觉这样更方便些。

作者: wangsea     时间: 2005-5-26 00:00
刚才做了个测试,成功启动了镜像
偶的参数:
grub.exe --config-file="map --mem (hd0,0)/gxms.img (fd0);map --hook;chainloader (fd0)+1"
使用的镜像是偶写的ghost完美中文shell (http://wangsea.ys168.com/ ghost完美中文shell目录下的gxms_hpa.rar)
发现有个问题:
1:第一次因我忘了指定(hd0,0)/gxms.img ,而直接写的是gxms.img,结果菜单出来后我编辑正确并启动镜像后在偶写的图形界面中死机。
2:参数如果第一次就指定正确进入镜像没有问题。
但不管参数正确与否,grub未启动镜像前软驱都一直在响,,直至屏幕上出现参数时才停止。
再次感谢不点提供了这么好一功能给我们使用,期待提供方法避免这个问题。
另外,因dos命令行的字符限制问题,还是我楼上想说的,能否有个默认当前路径,这样可以写更多的命令参数。

作者: 不点     时间: 2005-5-27 00:00
打了长篇的回复,论坛又给弄掉了,莫名其妙地显示我没登录。按"CTRL V"和粘贴都没用。总不能每次都在 vi 中写好并备份,然后粘贴到浏览器中吧?看来我得考虑换个论坛了。(以前在 WINDOWS 上本论坛,一样出现同样的问题)。

算了,现在只回复 wangsea 的一个问题了。

&gt; 但不管参数正确与否,grub未启动镜像前软驱都一直在响,,直至屏幕上出现参数时才停止。
我也出现过同样的问题,原因不清楚,希望大家详细描述,或者查看源代码帮助解决。



作者: wangsea     时间: 2005-5-27 00:00
关于软驱响的问题今天又有了新发现: 先前我打算将Grub放入优盘,让U盘以usb_zip或usb_hdd方式启动,这样虚拟的软盘A是从BIos中虚拟的,可能会骗过Gurb。结果当然是不成功的了。但是我发现在这样的条件下Gurb虽然启动不了我U盘上的IMG文件,但它没有导致软驱哗哗作响。 另外,这次不成功的启动试验还有一个奇怪的发现,如果config中加载了xmdisk的话,它会提示说没有运行在实模式(说我运行在V86模式)。 我一直以来有个疑问,如果要在硬盘分区表中写入一段程序的话,保护模式的编辑器是否都不可用?是否这段程序必须是16位的呢?如果用保护模式的编辑器可以写16位的程序的引导程序话,因为没有了segment,如果不能用dpmi转化段址的话,该如何操作呢?ecs shl 16是否就是cs的值呢?我在网上查了很久都没找到资料,所以冒昧地在此写下我的问题。 说了点题外的话,不点如果你有空就解我疑惑吧。论坛贴长贴子有问题的话,可以发到我的邮箱:wang6071@sina.com.cn

作者: Gandalf     时间: 2005-5-28 00:00
- 你可以 写一个 com 程序,但必须使用 dmpi 支持,这样的话,在保证了载入地址的正确性后,你的程序既能运行于要求得保护模式,而且无需考虑类似 exe 程序的重定位的问题。 一举两得。- 建议不点,在 grldr 中也加入参数得功能。(ntldr 将 boot.ini 参数放在了内存3 ~ 4MB 得空间里,并且做了一番格式化。)这样的话,可谓如虎添翼! ;)Grub4DOS 越来越强大了。。。 - 再者,欢迎不点兄到 bbs.wuyou.com 去作客,我(useronce) 是那里的常客。 嘿嘿。

作者: hnlyzhd     时间: 2005-5-28 00:00
不点如果能到无忧来的话,会给更多的人带来惊喜。相当于绝世高手下凡尘。

作者: 不点     时间: 2005-5-28 00:00
hnlyzhd:

无忧是我昨天第一个考虑的对象,主要就是因为早先听你说过。我为了查找你的那个帖子,还很费了时间呢。但是,当我访问那个论坛时,论坛慢得惊人,比这里的论坛还要慢。老实说,这里已经慢得难以忍受了,因此无忧的印象还不如这里。我匿名发一个帖子,几乎就是无回应,连出错信息都看不到。

DOS 之家也去了,它太像这里的论坛了,因此我也害怕,就连测试帖子都没发。

找了很多地方,没发现理想的。暂时还是觉得 http://grub.linuxeden.com/ 上可以留言,甚至匿名都不会丢失帖子,所以,就暂且启用它了。


&gt; 不点如果能到无忧来的话,会给更多的人带来惊喜。&gt; 相当于绝世高手下凡尘。这话听起来直打寒颤!
wangsea:
我没弄明白你的意思呢(指你末尾提出的问题),无法作答。Gandalf:
&gt; - 建议不点,在 grldr 中也加入参数得功能。(ntldr 将 boot.ini 参数放在了内存
&gt; 3 ~ 4MB 得空间里,并且做了一番格式化。)这样的话,可谓如虎添翼! ;)
看来你对此有研究了,你能否给 GRUB4DOS 打个补丁呢?虽然你已经说清楚了,可要行动起来,不是还要费一番工夫吗?我也会研究一下,但希望能直接得到你的补丁。
&gt; - 再者,欢迎不点兄到 bbs.wuyou.com 去作客,我(useronce) 是那里的常客。 嘿嘿。
从技术上讲,我本人喜欢玩 Linux,而DOS联盟、无忧、DOS之家等都是 DOS/WINDOWS 高手云集的地方,我走到 GRUB 之外就是一个小菜了。我还是先把 GRUB 完善之后再说吧。谢谢大伙关心和抬举!
===========
这个论坛不一定什么时候会丢掉帖子,我要是知道它什么时候会丢掉,也能有个防备,可是它毫无规律,指不定什么时候就弄丢了。并不是因为帖子长它才丢,该丢的时候,即使只打了一个字它也丢。丢帖子时,总是说我没有注册,但我是长年保留注册的,每次进来都显示我的名字呢。已经丢掉无数次了,每次弄丢都很恼火,尤其是那长篇的打字,更是可惜。如果在提交之前按“全选”“复制”,那么也不怕丢掉了,因为可以粘贴到别的地方。可问题是有时候会忘记“全选”“复制”,直接按了“发表”,这就完蛋了,没法后悔了。
这里我还会来,但不会很经常了。


作者: wangsea     时间: 2005-5-29 00:00
http://grub.linuxeden.com/ 俺这登不上,不知其他的朋友如何。无忧我这是挺快的,不知是你的用的网络问题还是浏览器问题。这个论坛虽不怎样(我上这个论坛主要是速度慢点,贴子倒是没丢过),但现在大家都还能在此交流,不点你还是常来吧。我的问题可能是我的思路还没有理清,不管它了,也许过段时间学习到了自然就清楚了。方便的话,不妨到www.ys168.com 去申请一个免费20M空间,交流起来也方便呀。

作者: 不点     时间: 2005-5-29 00:00
伊甸园的主站又遭到攻击了。不过不用担心,伊甸园不会像 newdos.yginfo.net 那样长期瘫痪。伊甸园的站长会解决这个问题的,我们可以等,我们有的是时间来等。

我最近一直在想,究竟为什么只有 LINUX 伊甸园和 newdos.yginfo.net 遭到攻击?八成是因为这两个网站都与 GRUB4DOS有关。我觉得那个攻击者,其实是想攻击 GRUB4DOS而已。所以,即便我转到另外一个地方,也仍然不能躲避这种攻击。索性让他随便攻吧,反正我们有的是时间等待他的攻击失效。

----------

我用 Firefox 浏览器,无论 LINUX 下,还是 WINDOWS下都是这个浏览器。已经丢失无数帖子了,无法把这里作为主要发帖和回帖地点了。如果说浏览器不行,那我用这个浏览器在别处为什么就行呢?我长期上各种Linux 网站,从来没发生过丢失帖子的事件。

Firefox 浏览器不会像 IE 那样浑身都是漏洞,容易遭到攻击,我不可能因为 Firefox 不能支持个别网站(或者反过来说,个别网站不支持 Firefox),就放弃使用 Firefox 的。

-----------

申请新的免费空间,感觉没有太大意义。可靠性才重要,像 newdos.yginfo.net那样长期被攻击致残,这就是一个教训。我们不是缺少空间,而是缺少可靠的空间。谁要是有可靠的空间,我当然乐意把主战场搬到其上。“可靠”包括很多含义,真的是很难保障。根据我长期的观察,伊甸园还算不错的了,遭到攻击之后,它都能尽快恢复,即便严重的攻击,也能在几天之内安全恢复。


作者: Gandalf     时间: 2005-5-30 00:00
- 不点, 中国 Linux 公社也可以。 这个站点有一个 Linux 发行版,国人做的, MagicLinux. ;-)http://www.linuxfans.org/nuke/modules.php?name=Forums- 我上次在弄 AVLDR 的时候,看了看 NTLDR 的内存,发现就在 &gt; 3 MB 的空间的某个地址,我也找到了,只是算法太笨,是按字节比较的。这样会有较大的延时。。。 而现在,我在弄AviatoR。

作者: 不点     时间: 2005-5-30 00:00
好吧,我也研究研究,你就专心弄你的 AviatoR 吧。

关于 Linux 网站,除了你说的这个公社之外,还有一个也吸收了很多高手,就是 http://www.linuxsir.org/ ,好像两个非常漂亮的开放源码的输入法 scim 和 fcite 的开发者都是该网站的会员。

不过它们还没有给会员提供项目存放空间,好像也没有博客空间可供使用。


作者: dato     时间: 2005-5-30 00:00
有的啊,不点大虾,你可以去管理区啊。像lumaqq fcitx都有专门的网站提供,scim有自己的项目主页。你的grub真的很好用

作者: 不点     时间: 2005-5-31 00:00
这我倒不太清楚了,谢谢dato兄。

lumaqq fcitx的网站是由谁来提供,我忘记了,但是我记得 scim 经历过网站迁移的痛苦,现在似乎被迫建立在sourceforge.net 上了。sourceforge虽然是最好的空间提供者,但是它修改了注册原则,要求注册者必须提供给它真实个人资料,这个我不愿意接受。虽然它声明它不会把这些资料用于其他目的,但是这也不能令人放心,它并不能保证黑客得不到这些资料。我知道可以用假资料来欺骗它,一些别有用心的人就可以这么做,因此我认为它要求善良的人们都用真实资料,是不合适的,不能保证他不会把这些资料提供给它的政府。

GRUB4DOS很需要大大发展,希望能够帮上忙的,都来参与。比如,NTFS 的驱动模块,是非常简陋的,BUG 多多。许多问题都是由 NTFS模块引起的,因此我希望有人能够重新写一个 NTFS 模块,可以以 LINUX kernel 中的程序作为基础。如果 NTFS模块保持现在这个样子,那么GRUB4DOS 就只能可靠地运行在 FAT 和 LINUX的文件系统之下,一旦要处理 NTFS系统的文件,就没有绝对的保证能够顺利运行。NTFS 模块就是 fsys_ntfs.c 这个文件,希望有人能够修改这个文件,或者全新建立一个。



作者: GONGXP     时间: 2005-6-7 00:00
不点大侠:“打了长篇的回复,论坛又给弄掉了”,我经常遇到,
好像是和中文的输入法有关,现在解决办法就是先在文本编辑好
再在论坛中粘贴,效果不错。

作者: zsbz0     时间: 2005-6-14 00:00
我老早就用了grub4dos,由于下载的链接都是英文界面,原以为是鬼佬做的,来了这里才发现是中国人做的,真令人振奋。我不懂编程,一下子把这帖从头看到尾还真是看得头晕。我有几个基本的问题,很菜别笑我。
1、由于下载了很久且没注意下载时的版本号,如何确认我当前用的grub4dos是哪个版本的?
2、我用的那个版本可以加一个图片背景,在启动时很是漂亮(这也是吸引我的一个因素之一,比枯燥的boot.ini选单强多了),新的版本也能使用图片背景吗?
3、选择从光驱引导、从存于硬盘上的img后缀的软盘镜像文件引导,如何实现?(前面说的我都不太明白,不知是不是前面说的那些内容)照着试出现提示(Error 1 :Filesname must be either an absolute pathname or blocklist)
4、你现在选好在哪个论坛了吗?选好了说一声,我跟过去。呵呵!
谢谢!

作者: 不点     时间: 2005-6-16 00:00
GRUB for DOS 是基于 GNU GRUB 的,而 GNU GRUB 确实是鬼佬做的。最开始的时候,GRUB 是一个外国人的作品,后来GNU 将该项目接管,并改名为 GNU GRUB,这是第二道贩子。我是第三道贩子,将 GNU GRUB 加入 DOS/NTLDR/LINUX的启动代码,并加入 BIOS 级别的磁盘仿真功能,并称之为 GRUB FOR DOS。还有两位,一位是 GANDALF,一位是bean123,他们基于 grub for DOS 又做了很多新的工作,比如中文支持,比如 windows GUI界面,还比如网络启动的强化等等。

我只负责维护 GRUB FOR DOS,其他两个基于 GRUB FOR DOS 的项目并非由我负责。网络上经常有人提供 GRLDR等文件,其实很难判断出这是经由谁修改的版本。这是因为 GRUB 包含全套的源代码,谁都可能加以修改,重新编译,生成 GRLDR 等文件。

我希望那些发布 GRUB 相关软件的人,都要注明是经由谁最终修改发布的,便于用户确认,这样当用户遇到 BUG的时候,他就知道该向谁报告。BUG 报告当然不能找错地方,比如,grub for dos 的 BUG,去找 GNU GRUB的维护者,人家当然不理。另外,发布应当遵守 GPL版权协议,告诉大家源代码的修改部分可以在哪里获得,这表示对自由软件基金会以及对原始作者的尊重。

&gt; 我用的那个版本可以加一个图片背景,在启动时很是漂亮(这也是吸引我的一个因素之一,比枯燥的boot.ini选单强多了),新的版本也能使用图片背景吗?

由我发布的版本,有图片背景支持。

&gt; 选择从光驱引导、从存于硬盘上的img后缀的软盘镜像文件引导,如何实现?(前面说的我都不太明白,不知是不是前面说的那些内容)照着试出现提示(Error 1 :Filesname must be either an absolute pathname or blocklist)

你应当熟悉 GNU GRUB 的文件表达法。你可以搜索网络,找到适合你的文章。作为一个选择,你可以到http://grub.linuxeden.com/ 去看看一些文章的连接。你可以看看 GRUB 入门之类的文章。当你敲入的文件名不符合GRUB 的要求时,它就提醒你:Filesname must be either an absolute pathname orblocklist

&gt; 你现在选好在哪个论坛了吗?选好了说一声,我跟过去。呵呵!

谢谢。开通了一个“grub for dos 的博客空间”:
http://www.linuxeden.com/forum/blog/index.php?blogId=23308

grub for dos 的问题不是很多,所以,你愿意在这里的论坛也可以,你选择博客空间也可以。我尽量都会经常看看的。


作者: zsbz0     时间: 2005-6-17 00:00
太感谢了,上网这么多年,有像你对我的问题回答的这么完整的实在是不多,感动!
我所振奋的正是你所加入的 DOS/NTLDR/LINUX代码部分,因为我也安装和用过redhat操作系统,也知道里边有个grub引导程序,不过都要写入引导区并有linux分区内的配置文件才能应用,这点对于我这个不是专业应用linux系统的普通用户来说真是又爱又恨。有了grub4dos这个程序之后,我就可以不改变引导分区的情况下灵活应用多重启动,而且还能进行一定的个性化(我是完美主义者),所以非常的喜欢,至于linux里的grub或是gnu grub我就没多大兴趣,对于常用windows的用户来说用实用性并不是很高。纯属个人愚见!最怕有人因我说XX不好而大力驳骂我。

作者: 不点     时间: 2005-6-17 00:00
你说的没错,不要怕谁骂。这里是 DOS 论坛,一般也不会因为你说 linux 不好或者说 GRUB 不好就被人责骂。

LINUX 好吗?就我的看法,是又好又不好。

GRUB (或者 grub for dos)好吗?同样,是又好又不好。说它好,是因为它很独特,它解决了很多问题。说它不好,是因为未解决的问题也太多了。

最近我在着手开发 GRLDR 启动代码对 ext2 文件系统的支持。开发成功后,对于 linux 用户会有很大的方便。

谢谢你使用 grub for dos,也谢谢你的鼓励。


作者: GONGXP     时间: 2005-6-25 00:00
不点大侠,不知道采用loadlin引导liunx后,再在liunx中用grub4lin可否?

作者: 不点     时间: 2005-6-26 00:00
loadlin 确实可以启动 linux,是基于这样一个事实:Linux对 BIOS 中断向量表不敏感,Linux 只使用 int80来处理系统调用,这和 DOS /WINDOWS 是不冲突的。int80 是 DOS/windows 不使用的,Linux 也不用DOS/Windows 所使用过的那些中断。因此,DOS 下破坏的大量中断向量,Linux不受影响,仍然可以正常运行。这就是说,loadlin 可以启动 Linux。

但是,如果要让 LOADLIN 启动的这个 LINUX 来运行grub4lin,那问题就出来了。我不是说在实际上一定会出问题,而是说在理论上这是有问题的。因为虽然 linux能运行,但是,中断向量表已经是遭到 DOS 破坏的那个表了,会带来无数的潜在问题,很容易死机的。Linux几乎不用那个实模式的中断向量表,所以,Linux 没问题,但是,启动 GRUB4LIN 进入 GRUB 之后,GRUB可是运行在实模式的,自然要用这个中断向量表,因此这个表的错误,将是很严重的,其表现也大致是动辄死机。

如果谁能够将 LOADLIN 打个补丁,让它在进入 LINUX 之前先恢复重要的 BIOS 中断向量,那么这个问题便解决了。其实GRUB.EXE 就不存在这个问题,因为 GRUB.EXE 运行之后就已经正确恢复了那些 BIOS 中断向量,所以,经由 GRUB.EXE启动的 Linux,是完美无瑕的,在这样的 Linux 下,是完全可以运行 grub4lin 进入 GRUB 环境的。GRLDR就更不用说了,它全部保留了原始的 BIOS 中断向量,没有任何更改,因此,它启动的 LINUX,也是完美无缺的。

(今天这个论坛又丢失了帖子,幸亏我事先保存到一个文件中了!)

作者: GONGXP     时间: 2005-6-28 00:00
今天测试:grub for dos 在Dos70(windows 98 se)以及Drdos7.03下可以运行,
在Dos80(windows me)不可以运行,直接清屏死机无信息提示.硬件环境是
(VIA)p4vmm266主板,512MB ram,80G硬盘.


作者: GONGXP     时间: 2005-6-28 00:00
不点大侠,采用软盘仿真启动的windows2003,启动后无软件驱,不知道软盘仿真能够释放吗?

作者: hnlyzhd     时间: 2005-6-28 00:00
各位看官,我为大家提供一个GRUB技术交流的空间如何呢?以后GRUB来这里交流讨论吧!http://sysoft.zdwx.com/bbs

作者: 不点     时间: 2005-6-28 00:00

&gt; 今天测试:grub for dos 在Dos70(windows 98 se)
在 Dos7 下运行很正常,意料之中。
&gt; 以及Drdos7.03下可以运行这出乎意料!不知你用的谁发布的版本,我发布的应当不能在 DRDOS 下运行。但将来可能会支持所有的 DOS 版本。
&gt; 在Dos80(windows me)不可以运行, 直接清屏死机无信息提示.硬件环境是(VIA)p4vmm266主板,512MB ram,80G硬盘.

这也出乎意料,因为 grub.exe 是支持 DOS8 的。你的 DOS8 是怎么制作出来的?是不是正宗的微软产品?说说制作过程。
总之,感觉要么你把 DRDOS 和 DOS8 这两个软盘弄颠倒了,要么你使用的是另外一个发布。
&gt; 采用软盘仿真启动的windows2003,启动后无软件驱,不知道软盘仿真能够释放吗?
windows NT 系列不像 98 那么友好,它对基于 BIOS 的调用不再提供兼容支持。这个问题应该由系统设计者或者微软来解决。


作者: GONGXP     时间: 2005-6-28 00:00    标题: drdos
Drdos和DOS80的确未反,dos80是采用dosme补丁制作,可以在硬盘启动的DOS80。
Drdos7.03启动盘附后。

作者: wangsea     时间: 2005-6-29 00:00
前段时间用grldr时就发现grub与不标准的dos引导不兼容(比如dos71),我估计是这类引导盘未查55AA引发的故障,而不是Grub的原因。

作者: GONGXP     时间: 2005-6-29 00:00
今天测试:
1.在windows2003下,2003在第四个NTFS分区,主分区FAT32,采用软盘仿真可以启动windows2003.
2.在windows2000下,2000在第一个主分区,为NTFS分区,采用windows 2000下格式化经证实可以启动系统的软盘,用winimage做成镜像文件,用grldr启动仿真试图启动系统,直接清屏死机。
采用windows 2003下格式化的软盘,改好boot.ini,用winimage做成镜像文件,用grldr启动仿真,报找不到系统文件。

作者: iovf     时间: 2005-7-30 11:07
Originally posted by GONGXP at 2005-6-29 12:00 AM:
今天测试:
1.在windows2003下,2003在第四个NTFS分区,主分区FAT32,采用软盘仿真可以启动windows2003.
2.在windows2000下,2000在第一个主分区,为NTFS分区,采 ...

最后一个改错了分区

作者: areyong     时间: 2006-4-11 22:28
不点的GRUB4DOS的新版本,非常好。
我成功地用新版本中增强了的 NBGRUB
解决了有盘加无盘混杂模式下的多语言中文启动菜单

特别致谢!

作者: leoxie     时间: 2006-7-18 13:58    标题: PCM CD-ROM
為何我的PCM CD-ROM在GRUBDISK後,找不到CD-ROM,我有將光盤放在光驅內哦,請大家幫忙。

作者: cooltom     时间: 2007-4-8 11:46
Originally posted by blue777 at 2005-3-24 11:00 AM:
现在我不做GrubDisk启动盘啦:)你也可以看看我最新做的sysliux+grub双引导的最新启动盘,我感觉还不错呢.http://bootdisk.ys168.com 的"潘多拉盒子"目录下有下载.

打不开。。。。老大去解锁一下啊

作者: jzzys     时间: 2007-4-8 13:16    标题: 感觉还不错
初进这个主题,我感觉还不错。