为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?


为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
现代的UEFI BIOS除了传统BIOS的一些配置信息还在CMOS中 , 绝大部分需要存储的内容都被保存在闪存芯片中 , 在那里 , 还居住着BIOS的执行代码、ME的代码和存储部分 , 以及一些其他固件们(GBe , PMC , TB PHY等等) 。 闪存 , 也就是Flash , 这个词汇经常出现在我们周围 , 这不 , 长江存储又刷屏了。 但是 , 这种闪存是固态硬盘要用到的NAND Flash , 而不是BIOS存储用到的NOR Flash 。
BIOS之所以选用NOR , 是看中了它的XIP , 也就是eXecute in place特性 。 我粗陋的翻译为原地执行代码 , 而不需要加载Load到某块内存中执行 。 这个特性十分重要 , 因为在上电启动后 , 内存初始化还没有进行 , 没有内存可供使用 , 虽然我们可以将Cache偷过来做内存用一段时间(Cache As RAM , CAR) , 但总是没有直接用起来方便 。 在CAR好了之前的代码 , 都是在NOR Flash上直接执行的(XIP) 。
BIOS芯片尽管BIOS使用NOR Flash上已经有很长时间 , 但它和南桥芯片的接口在经历了从FWH到SPI的转变 。 十几年前闪存接口是传统的挂在LPC下面的FirmwareHub , 那时的BIOS芯片长这样(现在有些古老主板上还可以找到它):
为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
ST FWH 2MB Flash
FWH闪存芯片管脚多 , 主板走线复杂 , 成本高 , LPC总线速度慢 , 这些弊病让主板BIOS芯片在十几年前慢慢地向SPI NOR Flash芯片转移 。 现在的BIOS芯片几乎都是SPI芯片 , 如果你仔细寻找 , 你几乎可以在所有的台式机、笔记本、服务器、甚至是嵌入式系统中找到它的身影:
为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
Winbound 25Q64BV
这是两个Winbond 8MB的芯片, 左边是8个管脚的封装 , 一般用作笔记本和嵌入式系统上;右边是16 pin的封装 , 一般用作台式机和服务器中 。
BIOS闪存芯片经历了一个逐渐变大的过程 。 从1MB到2MB , 再到8MB , 现在很多服务器已经用上了64MB的Flash 。 闪存内部要也不再仅仅是BIOS了 , 还有别的小伙伴杂居其中 。 如果你对闪存芯片内容好奇 , 可以用UEFITool 打开BIOS Image:
为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
一个BIOS Image例子
可以看到 , Flash开头是描述符Descriptor区域 。 里面的结构是Intel定义的 , 有其他各个区块的大小、位置和权限等信息 , 以及SoftStrap等等内容 。 BIOS的代码和存储只是其中一个区域 , 尽管在很多情况下是最大的区域 。
BIOS区中的可变部分:VariableBIOS区域中如何划分就是BIOS程序员自己做主了 。 一般被划分成很多区域(FV) , 一些是存储代码 , 一些是存储数据 。 存储数据是利用了NOR Flash的非易失(NVM)特性 , 简单来说就是掉电内容不丢失 , 这样用户的一些选项(setup options)才能长期存储 。 尽管用在固态硬盘的NAND Flash和BIOS芯片NOR Flash在存储原理上有很大不同 , 但一点却是相似的 , 那就是数据可以从1变成0 , 但不能从0变成1:
为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
想要从0变1 , 要经历一个擦除操作 , 这就是闪存所以被称为Flash的原因 。 而闪存的寿命是由能够擦除多少次来决定的 , 在NAND Flash是这样 , 在NOR Flash上也没有不同:
为什么很多用了几十年的主板也没听说过BIOS的数据坏了的呢?文章插图
NOR Flash可擦除次数更少