我的朋友正在建立一个带有消费级桌面设备的无头服务器,他遇到了这个错误,这个错误无疑让很多人以前看过或读过,但有人真的知道它为什么存在吗?
如果没有检测到键盘或键盘控制器出错,你怎么可能按某些东西才能恢复?
这是几个BIOS制造商采用的某种复活节彩蛋,还是有一个真正的原因,为什么常见的默认BIOS设置是在没有检测到键盘时不允许计算机启动,然后期望启动过程通过某种方式按键恢复?
[example from the Internet] http://p.twimg.com/AsWYydvCEAAiAHL.jpg:large
我的意思是认真的。
答案 0 :(得分:3)
在很多情况下,邮件遗留在传统时代。
现在,使用PS2键盘和智能控制器,无论如何都不可能在没有重启的情况下更换键盘,即使大多数USB也必须交换,然后在发生引导错误时重新上电。
然而,在整个PC革命开始的那一天,键盘被称为“XT或AT键盘”(取决于风格),而且大多数都有一个非常愚蠢的连接。
同样在大多数这些设备中,键盘控制器本身并不是那么聪明,首先它通常实际上是在PC主板上,而不是在键盘上(因为它们往往是今天)所以键盘本身真的非常愚蠢,如果发生了实际的物理键盘故障,那么经常拔掉它,插入一个工作的键盘并按照说明进行操作。
因此,在许多情况下,只要故障确实是一个真正的键盘故障,这实际上是可以遵守的。
这是一个已经发布的替代视图,从早期PC维修行业工作人员的角度来看,修复和构建早期的286/386和486基于PC以及解决问题。
答案 1 :(得分:2)
从实现的角度来看,大多数BIOS POST例程的结构如下(POST =开机自检):
InitializeChipset();
if(ErrorDetected()) {
printf("Chipset error\n");
HandleError();
}
InitializeMemoryController();
if(ErrorDetected()) {
printf("Memory error\n");
HandleError();
}
InitializeKeyboardController();
if(ErrorDetected()) {
printf("Keyboard not found\n");
HandleError();
}
InitializeHardDisk();
if(ErrorDetected()) {
printf("Hard disk error\n");
HandleError();
}
...
void HandleError() {
if(UserSettings.WaitForKeyPress) {
printf("Press F1 to Resume\n");
getch();
...
}
}
请注意,上面的代码是 HUGE 过分简化了BIOS的工作原理。另请注意,屏幕截图中的BIOS是用x86程序集编写的(看起来不像是AMI Aptio UEFI)。
基本上,如果检测到错误,代码将跳转到“按F1恢复”的通用错误处理程序。在大多数情况下,此错误处理程序的行为是合适的,除非没有连接键盘。它可以更好地编码,但BIOS工程师可能很懒惰。
至于为什么是丢失的键盘被认为是错误:当BIOS启动时,它会测试系统硬件,包括键盘控制器。键盘控制器测试失败,因为没有检测到键盘。在你的情况下,故障是预期的,但它也可能指向一个破碎的键盘或主板,这对于台式机/笔记本电脑来说是一件坏事。
出于这个原因,较新的BIOS将包含一个选项,可以在没有连接键盘时跳过此错误消息。通常它类似于“除了键盘之外的所有错误”。此外,服务器级设备或嵌入式系统上的BIOS通常是为无头操作定制的,并且通常会默认绕过此错误消息。