在2018年的最后几天,微软赶在圣诞节前一声炮响,给BIOS界带来了一个叫做Mu的开源项目(参考资料1),也正式引入了Firmware as a Service (FaaS)的概念:
These enhancements allow Project Mu devices to support Firmware as a Service (FaaS). Similar to Windows as a Service, Firmware as a Service optimizes UEFI and other system firmware for timely quality patches that keep firmware up to date and enables efficient development of post-launch features.
Mu的一个重要的目标就是和所谓的“Windows as a Service”一样,提供一套servcie,让BIOS不再只是一次性的交付,而是持续性的更新,并提供一套开源的框架来优化BIOS/固件的更新和升级。它和2018年下旬宣布的Component Firmware Update(CFU)一起,构成了一套开源的BIOS Capsule update工具箱。
朋友们经常会问起BIOS有升级的必要吗?作为BIOS专业人士,我认为BIOS绝对有必要升级。BIOS更新通常有几个原因:
1. 安全更新。BIOS更新很大一部分都是安全更新,这些更新不仅仅是meltdown这些安全漏洞。有些人认为我的电脑就是上上网,没啥秘密,所以不在乎安全问题。这是极端错误的思想,有了安全漏洞,轻则变成肉鸡,助纣为虐;还可能自己被监控,拍下隐私照片;重则主板报废,硬件损坏。
2. 修复bug。一些主板上的Bug,由客户报告后,会定期修复。一些CPU的bug,可能需要微码(microcode)更新。一些芯片组的bug,可能需要BIOS更新,譬如近期USB 3.1的问题。
3. 功能扩展。支持更高频率的DIMM,CPU refresh的支持等等。
很多人对BIOS更新怀有畏惧心理,主要表现在:
1. 不知道在哪里找更新文件。去主板官网下载还是Intel的网站?
2. 不知道怎么验证BIOS更新文件的真实性和完整性。万一上了个李鬼网站怎么办?万一网络出错下载内容错误或者不完整怎么办?
3. 不知道如何更新BIOS,需要什么命令,在哪种环境下。
4. 担心更新BIOS失败是不是主板只有保修或者报废。
是啊,这些担心都是有道理的,过去BIOS更新给大家留下了太多的心理阴影。以往更新BIOS就像一场挑战智力和运气的游戏:
1. 先阅读厚厚的主板手册,找到主板官网;或者百度,保佑别找到李鬼网站。
2. 官网上大海捞针,花费数个小时找到BIOS更新文件。保佑别找错了。
3. 仔细阅读readme。
4. 打开黑乎乎的DOS界面,键入一些古怪的命令。
5. 系统重启,进入更加古怪的黑色字符界面,一行提示警告你不要关闭电源,否则后果很严重。
6. 系统打出有时有百分比进度,有时又许久没有任何动作,让人抓狂。
7. 再次重启,这才是考验人品的时刻。
实际上现在做的比较好的BIOS早就不是这么原始的方式更新了。虽然赶不上现在的智能摄像头之类点击一下app就可以更新,但是也方便了许多。下面我们就已华硕为例,对大家担心的问题来分别了解一下。
如何找到更新文件现代的UEFI BIOS已经内置了网络协议栈,可以进行网络启动和安装,当然也可以网络更新BIOS:
ASUS BIOS 更新界面
华硕的主板支持自己去寻找BIOS更新文件,而不需要用户参与,在网站上浪费时间。华硕和其他不少厂商还有windows的APP,点开后也可以自动找到BIOS更新文件。当然这里也有自己下载放到U盘的选项。
微软也没有闲着,Windows Update(WU)会带部分有严重安全问题的最新主板BIOS更新,如果你win10升级的时候开始更新BIOS了,请不要惊讶!Linux世界有LVFS(Linux Vendor Firmware Service,见参考资料2),被Ubuntu和不少其他Linux发行版所接纳。
还需要DOS命令行这种东西吗?现在负责任的主板厂商都不需要自己在DOS下输入奇怪的命令了。上面几种更新方式都会自动重启,开始更新BIOS。
BIOS更新文件的完整性和真实性如果我们的BIOS或者app下载BIOS更新文件下载了一半,或者网络错误导致文件内容损坏怎么办?如果我选择手动更新,下载了李鬼BIOS怎么办?
这个完全不需要担心,如果我们仔细观察要更新的BIOS文件:
会发现它是个.cap文件。什么是cap文件?!
它是UEFI capsule update文件的缩写,Capsule,顾名思义,是“胶囊”的意思,所以UEFI Capsule Update可以理解为胶囊式固件更新。它的详细内容在这里:July:UEFI 固件更新
近期的电脑芯片,基本都要求主板开启一个叫做Boot Guard的安全功能。所以cap文件都会被主板厂商用自己的私钥签名,没有签名的文件会被拒绝更新和启动。了解非对称密码签名的同学应该都知道签名在目前是不会被仿冒的,真实性大可放心。另外验证签名的时候也会对完整性进行验证。
BIOS健壮性是如何保证的?既然BIOS不会有假而且完整,那更新后BIOS一定不会出问题吗?BIOS本质来说是个固件,这个问题和我们的智能手机、手表、机器人等等更新固件一样,他们更新时你会担心吗?也许还有一点点。:)
要知道这些被签名过的固件包括BIOS,更新后因为固件本身引发的问题,责任人都是发布者本身而不是消费者,所有维修召回的费用都需要他们承担,甚至中间有任何的损失,包括资料损坏甚至误工等等都可能引发诉讼。厂商在这方面极端小心,固件更新发布前,都经过了大规模的测试,在保障万无一失的情况下,才会发布。在绝大多数情况下不会出问题。
出了问题怎么办?唯一可能出问题的地方就是更新BIOS过程被中断。有人说了,我可以保证我不手残,拔电源,但保证不了家里不忽然断电啊。这是一个reasonable的顾虑,对此主板厂商都有解决办法。负责任的主板厂商当然不会采取返厂这种手段,根据厂商不同,会采取双BIOS、top swap、dual PEI等等手段,保证在最坏情况,还有办法恢复BIOS。
笔记本比较特殊,有些厂商更新BIOS的时候要求必须连接电源,并且电池电量必须大于多少,来保证万无一失。
至于扣下来BIOS,用programmer自己烧录的方法非常不建议使用。SPI Flash插反会烧掉片子,直接烧录会跳过完整性和真实性检查。如果你仔细观察cap文件,会发现它比BIOS的SPI Flash大一些,直接烧录cap文件是做不到的。
结论虽然BIOS更新现在远远称不上User Friendly,至少比手机更新固件的体验还是差了一大截。苹果和安卓手机用的push方式更新固件,保证了用户可以即使得到通知并在合适的时机更新固件。我相信很少会有人主动在BIOS里面更新固件,Windows app或者windows update只解决了在windows世界的问题,Linux世界却留下了大段的空白。UEFI业内也在积极行动,寻找一种体验更好、更高效也更安全的更新方式。
但是更新BIOS还是必须要做的,风险也是十分的小,如果你已经看到BIOS更新的提示而选择忽略的话,也许更大的风险被隐藏了起来。
参考资料:
[1]: Introducing Project Mu
[2]: LVFS: Home