笔记本电脑中的 BIOS 更新是通过改变一些微代码来完成的吗?

笔记本电脑中的 BIOS 更新是通过改变一些微代码来完成的吗?

BIOS 如何更新?是通过微编程还是微编码?如果不是,那会发生什么?

答案1

BIOS 实际上是怎样更新的?是通过微编程/微编码吗?如果不是,那会发生什么?

在过去,在 BIOS 存储在 EEPROM/NOR/NAND 闪存上之前,您必须用较新的芯片物理替换 BIOS ROM。或者,如果芯片是 EEPROM,您可以移除芯片,在 EEPROM 编程器中对其进行编程,然后再放回去。ROM 几乎总是为此目的而插入插槽。

可更新的 BIOS 位于表面贴装闪存中,或者可能是旧系统上的 EEPROM 中。与系统其余部分的连接(如 @Krunal Desai 所述为 SPI)是通过芯片组进行的。所有 BIOS 固件设备都与 CPU 连接,以允许 BIOS 从内存中读取和执行代码,并且还有另一个接口允许编程。

要更新 BIOS,程序必须与闪存芯片的编程接口通信,并用新数据覆盖其页面。可能需要先执行某些操作来“解锁”。这些是 I/O 操作,与与磁盘或显示控制器通信属于同一类别,而不是真正的“微编程”或“微代码”操作。

如果您以前曾遇到过与 BIOS 相关的术语“微代码”,那么这是一个完全不同的东西。

许多 CPU 都有微代码,它们本质上是在 CPU 内部运行的小程序。原因是,一些复杂的 CPU 指令通过微代码设计和处理比直接在硬件中设计和处理更容易/更便宜。软件开发人员通常无法更改 CPU 的微代码。

如果 CPU 生产过程中出现错误或故障,Intel 和 AMD 允许更新 CPU 微码。最近,英特尔的一款芯片引入了“事务内存”或 TSX 指令,但这些指令无法正常工作。通常,其工作方式是,当 BIOS 初始化系统时,它会将最新的微码更新应用于 CPU。如果出现了不同的微码更新,硬件供应商可能会发布另一个具有最新微码的 BIOS 更新。操作系统也可以自行安装最新的微码。

这仍然不是“微编程”,因为您只是在这里应用“CPU 更新”,而不是在您自己的程序中使用单独的“微指令”。

断电时微码更新会丢失,每次启动时都需要应用。

答案2

在现代 Intel 平台上,BIOS 存储在连接到 PCH 的 SPI(串行外设接口)NOR 闪存芯片中。具体更新方法因 BIOS 供应商而异,但我过去为我的公司维护基于 AMI UEFI 的 BIOS。固件更新工具 (AmiFlash) 可以从 Windows、UEFI shell 或自启动 DOS 环境执行,并简单地覆盖该 SPI 闪存的内容。

过去,英特尔平台曾经有一个基于 FWH(固件中心)的存储设备,位于 LPC(低引脚数)总线上。

微代码更新通常作为 BIOS 更新的一部分提供,并在每次电源循环时以二进制 blob 形式应用 - 实际 CPU 不会以任何方式、形状或形式进行修改。

我认为 AMD 非常相似——他们可能也已经转向传统的 SPI 内存。

如果在更新过程中断电或进行其他中断,您的平台就会变砖。有些主板有双 SPI 闪存,允许使用 A/B 组切换式方法。

答案3

固件更新本质上是将一块内存刷入闪存芯片或主板上的 EEPROM 设备。BIOS 代码非常关键,因为它是启动代码,用于启动和运行特定操作系统(Windows、Linux 等)。此外,BIOS 还处理许多其他功能、关键 I/O 分配、启动驱动器选择等。

操作系统有一个应用程序来处理 BIOS 代码的实际更新,您可以从网页或通过 USB 拇指驱动器下载新代码(十六进制格式),主板制造商将提供一个与其硬件对话的程序,并将新 BIOS '推送'到主板。

许多高端主板 BIOS 更新程序都具有故障安全更新方法,以防设备在更新过程中断电。新代码被写入空白区域,然后下载校验和。新代码经过校验和计算以验证其是否正确。如果正确,BIOS 中的标志将指向新的内存区域。然后重新启动计算机并使用新代码。如果出现任何问题,标志仍将指向旧代码,并通知用户重新应用更新。

我编写并维护了用于商业运输、医疗设备和多媒体设备的嵌入式“黑匣子”的更新代码;mp3 播放器、机顶盒等。

相关内容