|
dos@fans1
初级用户
积分 113
发帖 2
注册 2005-2-6
状态 离线
|
『第
181 楼』:
对不起,我没有说清楚。“超级dos启动盘“的镜像上本来就有一个grub,这样在启动时有一个选择菜单可以选择是从硬盘启动还是启动dos或者从光盘启动。但是pre7版的grldr就只能把镜像中的这个grub引导到stage1,而看不到选择菜单。但以前版本的grubfordos是能够引导成功的。所以我认为这是这个版本的一个bug。“超级dos启动盘“在本站很容易下的。不点大侠可以试一试。
|
|
2005-4-18 00:00 |
|
|
GONGXP
初级用户
积分 184
发帖 31
注册 2005-3-13
状态 离线
|
『第
182 楼』:
多谢您这么快响应。
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.
[此贴子已经被作者于2005-4-19 0:06:11编辑过]
|
|
2005-4-18 00:00 |
|
|
GONGXP
初级用户
积分 184
发帖 31
注册 2005-3-13
状态 离线
|
『第
183 楼』:
以下是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", 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 |
|
|
不点
银牌会员
不甘寂寞的人
积分 2491
发帖 1115
注册 2003-9-24
状态 离线
|
『第
184 楼』:
现在先只回复 dos@fans1 的问题。GONGXP 的问题比较复杂,待我仔细研读之后再作回复。
> 但是pre7版的grldr就只能把镜像中的这个grub引导到stage1,而看不到选择菜单。
前面我的回复也就是这个意思,这里并无问题。GRLDR 只要能够启动该 IMG,就完成任务了。其余的,我猜想,不是 GRLDR的错误,而是该软盘映象中 GRUB 的错误。有可能是因为该映象中的 GRUB 版本太低造成的。你可以试试把映象中的 GRUB版本升级为最新版,看看如何?如果升级为最新版还是不行,那么就可以确认这真的是一个问题了。
> 但以前版本的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 |
|
|
不点
银牌会员
不甘寂寞的人
积分 2491
发帖 1115
注册 2003-9-24
状态 离线
|
『第
185 楼』:
GONGXP:
> rpl远程启动后,系统a:盘指向服务器软盘镜像文件,占用100多k常规内存
这就坏了。常规内存是非常宝贵的,随便就占用这么多的常规内存,会带来很多潜在的问题。
在 BIOS 将控制权交给操作系统的引导程序之前,BIOS 对常规内存的占用,都限定为 extended bios data area这个空间。这个空间不能太大,一般只有 1K,多的,也可能有 4K。虽然这里没有明文规定,但是,超过 4K 的,是罕见的,而超过8K,就可能引起问题了。这段空间位于常规内存的顶部。我认为,BIOS程序将自己挪动到常规内存,是一种“不良行为”。一个设计良好的程序,绝不应当是这样的。
> 运行微软提供的一个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 这样的程序了。但现在恐怕还是需要你自己做这些工作了。
大致上我的看法就是这样,虽然这些英文资料还没有来得及细看。
|
因为我们亲手创建,这个世界更加美丽。 |
|
2005-4-19 00:00 |
|
|
areyong
中级用户
积分 211
发帖 39
注册 2003-6-25
状态 离线
|
『第
186 楼』:
有关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
|
|
2005-4-20 00:00 |
|
|
areyong
中级用户
积分 211
发帖 39
注册 2003-6-25
状态 离线
|
『第
187 楼』:
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 |
|
|
不点
银牌会员
不甘寂寞的人
积分 2491
发帖 1115
注册 2003-9-24
状态 离线
|
『第
188 楼』:
看来都在关心网络启动相关的问题。也许 GRUB for DOS 又将迎来一个新的应用推广了。谢谢 areyong。
根据 areyong 的描述,这个从网络启动的无盘 DOS,是能够顺利运行 grub.exe 的。这个很关键,否则我们可能就要遇到像 GONGXP 所说的那种问题了。下面就有关的问题谈谈我的看法。
> 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 等等这些规范。
> 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。
只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 BIOS 可以识别的磁盘号码(硬盘或者软盘)。
> 无盘启动我是用BOOTP启动芯片来启动的,启动之后,会仿真一个A:盘,这个A盘在DOS下是可以读写的。在DOS下,用一个rdrm.com(很小的,一百多个字节),可以退出BOOTP启动芯片的程序,还原真实的软驱盘。它这个退出很干净。
GRUB.EXE 并非要求一定得还原真实的软驱。GRUB.EXE 所要求的,是 int13 等等这类关键中断服务程序的入口地址,必须是在ROM 中(不低于C000:0000的空间),而不是在常规内存中。只要能保证这个,那么,grub.exe 就会顺利运行。如果不是在 ROM中,那么 grub.exe 也会尝试查找 ROM 中的入口地址,找到之后也让 grub.exe 顺利运行,找不到则退出并报告失败。
> 把 grub --mem 这个参数对内存容量的参数放低,我想把GRUB用到比较陈旧但现在还在使用的工控机中去,它们的内存通常只有16M。
--mem 现在对内存容量毫无限制,即使只有 2M 的内存,也可以用顶端的 1M 来仿真一个软盘。不过,如果你的机器太老,它可能不支持int15/eax=e820h 这个比较新的内存规范。这个规范是 Pheonix首先使用的,现在已经成了事实工业标准,已经被所有新型的硬软件所支持了。不过,既然有人需要这个功能,那么我会记住,将来在适当的时候,如果方便的话,也可以考虑支持旧的内存规范。目前而言,不支持 这个 E820 规范的硬件和软件,都不能在 grub for dos 下正常工作。
|
因为我们亲手创建,这个世界更加美丽。 |
|
2005-4-20 00:00 |
|
|
GONGXP
初级用户
积分 184
发帖 31
注册 2005-3-13
状态 离线
|
『第
189 楼』:
areyong描述的xmsdsk.exe中,加/t参数,可以在dos下直接loadce.exe运行
windows ce,可能也能loadlin.exe运行linux,但是不知是否有loadXP?
不知比尔.盖茨先生受了什么刺激,非要将dos赶尽杀绝。如果不点大侠的gurb.exe
能够在这些“污染”了bios的dos中有更多的适应性,善莫大焉。
|
|
2005-4-20 00:00 |
|
|
Gandalf
中级用户
CPU
积分 362
发帖 96
注册 2004-7-8 来自 北京
状态 离线
|
『第
190 楼』:
不点,及诸位:
------------------------------------------------------------- 面对这两个无盘启动的问题,我道有个想法。 既然,常规内存一定是要被“污染”,就是中断向量,Grub.exe 又必须使用和拒绝被污染了的中断向量,那么为什么不可以在恰当的时候保存一份“未被污染”的 I-Vectors 呢? 也就 0x600 的空间嘛。然后在无盘服务其上放置一份可是用此 I-Vectors 的 Grub.exe 不就可以了吗? 当然,我们在这个地方,也可以这么认为,即, rpl 的修改是善意的。如果,我们在Grub.exe 的内部采取信任的方式,岂不能通过修改过了的 INT13h 访问无盘服务器上的FDD img 了那? 此外,似乎, Grub 在编译好了以后,就可以支持网络启动,甚至是无盘启动的。
|
f22_storm@163.com
http://sysoft.zdwx.com/
|
|
2005-4-20 00:00 |
|
|
areyong
中级用户
积分 211
发帖 39
注册 2003-6-25
状态 离线
|
『第
191 楼』:
回复:
> 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。
>只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 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) 都死机
|
|
2005-4-20 00:00 |
|
|
windrv
中级用户
积分 385
发帖 118
注册 2003-11-11
状态 离线
|
『第
192 楼』:
Quote: | 以下是引用areyong在2005-4-20 23:57:37的发言:
> 把xmsdsk.com生成的内存盘再次虚拟成物理硬盘并告诉BIOS.当然,现在的GRUB好象没有这个功能。
>只要能找到内存盘在物理内存中的位置,就可以生办法将它虚拟成 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 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 10:56:24编辑过]
|
|
2005-4-21 00:00 |
|
|
不点
银牌会员
不甘寂寞的人
积分 2491
发帖 1115
注册 2003-9-24
状态 离线
|
『第
193 楼』:
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。
另外,如果要编写你说的这些程序,恐怕不是那么容易的,应当需要一个过程。这问题理论上是可以解决的,但是,要真的去解决,还得有条件才行,需要对各个细节都了解,而这是需要一个过程的。我这里没有这些条件,因此很难解决你的问题了。
|
因为我们亲手创建,这个世界更加美丽。 |
|
2005-4-21 00:00 |
|
|
hnlyzhd
高级用户
积分 544
发帖 164
注册 2004-10-17
状态 离线
|
『第
194 楼』:
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上呢?
|
我的留言簿
http://hnlyzhd.ys168.com 我的网络盘
|
|
2005-4-21 00:00 |
|
|
hnlyzhd
高级用户
积分 544
发帖 164
注册 2004-10-17
状态 离线
|
『第
195 楼』:
TO 不点:1.现有的GRLDR能否实现复制自身启动代码到MBR呢,还有上次我说的启动时的热键问题,最好能指定一个热键,时间有一秒就够了,不能等太长时间,任意键也不安全。如果没有热键来激活每次都会出现GRUB菜单的。2.对于 GRUB从ROM中运行,我觉得应该可以的,就像ROMOS的FREEDOS在BIOS中启动一样。3.GRUB的CHAINLOADER能否启动BIOS中的PCI模块呢,在这方面来说BIOS的模拟器还是一个空白。如果需要相应模块,我可以提供给你,包括DOS和硬盘保护模块。
|
我的留言簿
http://hnlyzhd.ys168.com 我的网络盘
|
|
2005-4-21 00:00 |
|