![BIOS 系统中的 CMOS 校验和是如何定义的?](https://linux22.com/image/1454700/BIOS%20%E7%B3%BB%E7%BB%9F%E4%B8%AD%E7%9A%84%20CMOS%20%E6%A0%A1%E9%AA%8C%E5%92%8C%E6%98%AF%E5%A6%82%E4%BD%95%E5%AE%9A%E4%B9%89%E7%9A%84%EF%BC%9F.png)
我相信你们中的许多人都亲眼见过并经历过可怕的“CMOS 校验和错误”。但它是什么呢?
CMOS 校验和错误
- 这是什么的校验和?CMOS 数据的全部内容?一些特定的参数数据?
- 这是什么类型的校验和?是 CRC-8 吗?还是其他什么?
- 我理解此错误表示校验和不匹配。但是与 CMOS 校验和进行比较的第二个校验和是什么?
- 为什么这两个校验和需要匹配?
- 如果不匹配会发生什么?会显示错误,对吧?但是如果我们忽略错误会怎么样?是否可以忽略错误并继续启动过程?
答案1
与闪存不同,BIOS 设置非挥发性记忆体(至少从历史上看,通常是使用互补金属氧化物半导体技术,因此得名“CMOS 内存”) 将在电源断电后被清除。一个小电池连接到主板的电池可在主板断开外部电源时提供电力。该电池还可驱动实时时钟当其他电源不可用时。像所有电池一样,电池最终会耗尽并需要更换;这种情况预计会在 5-10 年后发生,具体取决于系统的使用情况。“CMOS 校验和错误”(以及类似消息)或系统时钟重置是电池耗尽的典型迹象。
BIOS 设置包含几个对系统至关重要的值。当内存因电池耗尽而无法维护时,一切都会恢复到由内存的物理和电气设计决定的模式,而不是与用户输入的设置相匹配的模式。需要建立一种机制来检测和处理这种情况。
可以想象扫描设置内存并对数据执行一些健全性检查,这可能会在绝大多数情况下发现上述问题。但它可能无法发现所有问题,而校验和提供了额外的好处。首先,它允许捕获任何无意的数据损坏。请记住,在最初的 IBM PC XT/AT 设计中,任何进程都可以写入任何内存位置,包括向 BIOS 设置内存发出写入指令,因此错误的软件可能会(无意或恶意地)破坏这些设置。无论多么小,也有可能中断对系统设置的合法重写,例如由于电源故障。
如何计算校验和、将校验和存储在何处、校验和究竟涵盖哪些内容等具体机制,对于每个特定的 BIOS 和很可能是 BIOS 版本而言都是特定于实现的。重要的是,它需要检测内存已重置的情况。为了涵盖不同的内存芯片设计,这意味着它需要比所有字节的简单总和(模 2^n)更复杂,但至少起初、IBM 的ROM BIOS 为 8 KiB(需要做一个很多所以它也不可能是一个特别复杂的算法。
由于受校验和保护的数据部分对系统至关重要,因此简单地忽略错误(实际上我不会将其称为错误;它更像是警告)是不可取的。相反,您应该进入配置实用程序(“BIOS 设置”)并执行必要的例行操作以执行自动检测或重置为出厂配置,然后调整需要从特定系统的默认值调整的任何设置。一些知道数据不重要的系统可能会忽略校验和不匹配并继续运行,但在IBM个人计算机以后,这样做意味着您将面临使用不正确的系统配置数据的风险(包括硬盘几何形状;硬盘几何形状自动检测出现得更晚,我记得使用基于 386 的系统,需要通过 BIOS 设置手动配置硬盘几何形状)。