网上冲浪 | 反毒杀毒 | 菜鸟进阶 | 网络安全 | 实用技术 | 网络安全 | 操作系统 |
工具软件 | 电脑医院 | 网上赚钱 | 网页制作 | 网络营销 | 经典教程 | IT趣 谈 |
当前位置:IT快活林网上冲浪实用技术

一个硬件难题,希望大家一起诊断解决。

在 http://grub4dos.jot.com/ 上有最新编译的 GRUB.EXE 文件.这一个文件支持在 win98 下运行,原则上讲,也应该能够在 winMe 下运行,但是我这里没有 WinMe 的机器,所以根本没有办法测试.在 NT/2K/XP 下肯定不行,不要指望了.

是的,我们确实没必要支持在 WIN98 下运行,因为 WIN98 可以切换到 real mode 的 DOS 来运行 GRUB.EXE.

但是,既然有这种可能性,那为什么或者说怎么会不去尝试呢?如果我们能够在 98 下顺利运行,这对于我们进一步理解硬件,掌握深层硬件知识,无疑会有很大的帮助.

目前这一个版本,在一台老机器(win98)上测试,非常成功,但是,在其他机器上测试,统统归于失败,启动操作系统 GRUB.EXE 的过程会造成电脑死机.注意,您测试的时候也会电脑死机(!!!!),记住保存好您的工作(Work),譬如退出您正在Editor的 WORD 文档,然后再测试.

那台成功的机器,主板比较旧,是华硕的 PII 主板.机器中没有网卡,而不能是在 98 下电源管理驱动也没有安装成功(这可能也是运行 GRUB.EXE 成功的一个原因),也没有内置和外置的 MODEM,声卡也没有驱动成功.我怀疑,所有这些不成功的硬件,正是启动操作系统 GRUB.EXE 成功的原因.

在其他机器上,网卡,声卡,电源管理都已经正常驱动,所以,用 GRUB.EXE 强行进入实模式之后,这些硬件不断发来的中断信号,导致 GRUB 电脑死机.我已经对 PIC 进行了编程,包括对 PIC 的优先级进行了实模式兼容性调整,将中断号重新设定为实模式的 int08 到 int0F,int70 到 int77,但是我没有屏蔽任何中断,因为资料上说,BIOS 在 POST 之后会开放所有的中断,不怎么会屏蔽任何一个.

需要硬件知识,谁知道的,帮忙吧.目前我猜测是因为那些硬件中断没有合适的实模式驱动程序(Procedures)(Procedures)而不能是产生电脑死机.谁知道怎么初始化那些硬件,让他们与实模式兼容? -------
如果GRUB for DOS在Win98下是通过强行从保护模式进入实模式的方式来启动操作系统自身的话,恐怕会对操作操作系统本身造成一些问题,尤其是如果硬件正在工作(Work)中时更可能对硬件造成一些损害.我建议先关闭所有正在运行的进程和硬件才好,而不能是且最好还是尽量通过WIN下所支持的方式(包括WIN API)来进行,以最大程度提高系统的安全性,系统的稳定性以及在不同电脑上的兼容性.
Wengier - 新DOS时代欢迎大家来到我的“新DOS时代”网站,里面有各类DOS软件(soft)和资料,地址:
http://wendos.mycool.net/E-Mail & MSN: wengierwu AT hotmail.com / 谷哥 Talk: wengierwu AT gmail.com (欢迎大家和我聊~~)-------
> 对硬件造成一些损害像掉电一样,对硬件不怎么会有更多的损害.由于我们只是简单地从 DOS 窗口下运行,所以,还根本没有办法编写像 Win32 那样复杂的程序(Procedures)(Procedures),通知应用程序(Procedures)(Procedures)退出,等等;如果那样的话,不知道二进制执行程序(Procedures)(Procedures)的长度又要增大几十或者是几百个 KB.况且微软也根本没有公开的 API 可以用来切换到实模式.所以我们可以得出结论,像我们这样简单的程序(Procedures)(Procedures)设计方法,根本不可能做到绝对的“系统的安全性,系统的稳定性”. -------
不知不觉地GRUB4DOS已经走到对硬件支持的改进这条路上来了.除了A20这一个古老的话题以外,还有在98下直接或者间接运行GRUB.EXE的基本问题.和后者比起来,A20似乎还不是我们的难题.通过禁止鼠标,初始化可编程中断控制器,初始化操作操作系统时钟,已经可以让不少机器可以在98下运行GRUB.EXE了.但是,还是有一些机器出现电脑死机.出现电脑死机的机器,使用了USB键盘.所以我怀疑USB设备的初始化是个问题.查了资料,但不知道怎么初始化USB设备,也不知道怎么初始化 PCI 设备(用公开的 int1A 标准,但这一个标准没有说如何初始化设备).于是,想到了ROM,看看ROM是如何初始化这些设备的.这台机器的ROM编的可谓酷,我用GRDB单步追踪,结果他总是有一条系统指令将SS段寄存器设置为F000.起初我以为是ROM的BUG,但这条系统指令多次出现,而不能是且他只设置SS,而不能是不设置SP,这迫使我想到,这是故意安排的,他是反追踪的最好手段.试想,如果调试程序(Procedures)(Procedures)将断点下在 ROM 程序(Procedures)(Procedures)中,碰到断点,总要执行 int01 或者是 int03 系统指令,而不能是这些系统指令都要使用堆栈.如果堆栈放在 ROM 中,那么使用堆栈的系统指令必然失败,因为 ROM 是只读的,写进去的 CS 和 IP 都被丢弃了.好了,小心一点,每次碰到这条设置 SS 的系统指令,就让他跳过,不要执行他.然而不能是,这一个 ROM 程序(Procedures)(Procedures)还有别的反追踪手段:我不知道执行到什么地方,在一条 out 系统指令后,屏幕上干净了,像清屏了一样.键盘还没死锁,因为我按 NumLock 键,键盘指示灯有反应.摸黑按调试系统命令 g,可以顺利启动操作系统下去,进入操作操作操作系统中.干脆在 ROM 中查找 CD 1A 这一个字符串(就是 int1A 的机器汇编码).结果找到了一段程序(Procedures)(Procedures),我猜想这应该就是 PCI 设备的初始化程序(Procedures)(Procedures)了.可是用这段程序(Procedures)(Procedures)以后,GRUB.EXE 死得更彻底了,郁闷.唉,正如 Stallman 所倡导的那样,BIOS 是最后一个需要开放源码去征服的领地…… -------
不用grub -------
  Quote:Originally posted by xuantian at 2006-5-8 02:24 PM:
不用grub
不用,不用留言,{$WebSiteName}的站长在干正事呀....可以说给在大家造福!!! 2006-5-8 04:26 PM
[]作者:本站整理  来源:不祥