UEFI在ARM生态中现状如何?ARM SystemReady认证金标准介绍
因为微信更改了推送规则,推文不再按照时间线显示,如果不点『在看』或者没有『星标』,可能就看不到我们的推送了!如果不想错过UEFI公众号的精彩内容,请记得点击上方蓝字“UEFI社区”,然后再右上角“...”点选“设为星标”。再次谢谢大家的关注!
在大多数人心目中,ARM世界的BootLoader还被uboot+DeviceTree统治。是啊,uboot简单快捷,移植容易,为什么不用呢?但uboot有个显著的缺点:缺乏标准和互操作性。这让它更合适专用系统,而不是通用系统。在ARM多用于嵌入式设备,如摄像头和手机等等,的时候,这个并不是问题。嵌入式设备往往是垂直定制开发的,从硬件、固件、BSP和操作系统,都深度定制,没有问题是定制修改程序所不能解决的。但当ARM进入到x86的传统领域后,如PC和服务器市场,情况发生了变化。
ARM生态的通用性需求不断增长
与大多数人基本的概念不同,在某种意义上来说,X86体系比ARM体系更加开放。X86是很多小伙伴一起玩,以生态圈的概念提供产品,并对自己那部分负责;而ARM体系虽然也依赖生态圈,但最终有个大Boss统合整个生态链,提供最后产品并对该产品负总责。
X86生态圈玩家众多,有OS 厂商(OSV)定期发布操作系统,如Windows,Ubuntu;芯片厂商提供CPU,如Intel, AMD;主板厂商(OEM)提供电脑主板;独立硬件供应商(IHV)生产扩展板卡如显卡等等PCIE扩展卡,再如内存厂家推出一代一代不同的内存条等等。DIY玩家可以自由选择搭配合适/兼容的产品搭配出自己心仪的机器,休闲上网用户花2000多元就可以搭配出一套可用的电脑,而游戏玩家则可能花费上万元才能满足游戏配置需求。还有些品牌机厂商如Dell和联想等,他们提供整套最终产品给用户。但他们实际上是在所有小伙伴的零件基础上拼凑出个产品,技术不强,话语权弱,并不能统一整个产业链。用户津津乐道的反而是用的什么CPU,安装的什么操作系统,用的那种显卡等等。Windows死机、蓝屏和缓慢等等时候,用户往往会抱怨微软和Intel,而不是品牌厂商。在X86生态中,强势的是整个生态链的两端:微软和Intel,分别卡住最上游和最下游。在争取了链条利润的最大头后,也要直接面对数千数万种千奇百怪的硬件产品,于是才发明了UEFI和ACPI标准,规范了各个层面的调用接口。更重要的是,为了规范中间链条各个厂商的行为,分别推出了一软一硬两个认证:WHQL和Intel最新的EVO。保证了市面上上百种产品的质量可控。
传统ARM体系由最后品牌厂商统合整个产品,它负责打通整个产业链,并对其中所有部分负责,话语权极强,同时对技术也相对较强。用户面对的具体品牌的产品,而不是碎片化的各个部分。强势的如Apple,硬件软件一起抓,完全组成闭环的链条。稍差也如华为等安卓手机,要负责安卓系统在自己手机移植部分(BSP),客户出了问题并不会找谷歌,而会去找华为。对规范和标准的需求并不强烈。
随着采用ARM内核的芯片性能不断提高,ARM内核芯片不断进入x86传统领域。移动和桌面有Apple的Axx,服务器端有鲲鹏920(也可以用于桌面)、倚天710,、安培和Graviton系列,它们的性能完全可以和Intel/AMD的芯片打擂台。当ARM的小伙伴们进入这些领域后,他们发现一样也要面临碎片化的生态系统的问题。于是接受UEFI和ACPI变成了必然的选择。这也从EDK2社区最活跃的用户在近几年已经不是x86的开发者,而是ARM相关开发者(最近一年多换成了RISC-V)可以看出。于此同时EDK2开源平台仓库EDK2_Platforms下面也涌入了大量ARM平台,好不热闹。
现状是,所有成熟的ARM服务器产品都采用UEFI+ACPI方案;很多ARM移动和桌面产品已经采用UEFI+ACPI方案;大量ARM产品在赶来的路上;形式喜人。同时,作为ARM世界的灵魂,ARM公司也推出了大量规范和标准,来规范ARM产品的行为,如针对服务器的服务器的SBSA和SBBR规范,最新的基本系统架构(BSA)、基本启动要求(BBR),以及针对安全的基本启动安全要求(BBSR)等等。多个层次和方向的规范标准相当繁杂,而且标准有些是必须达到的,有些则是推荐,这样给最终用户造成了不少困扰,也造成了市场的混乱。如何定义“好的”ARM产品标准,这个标准必须是可衡量的、可标识的,并且要简单易懂,最好还能朗朗上口?微软以前的答案是WHQL认证测试和Windowsxx标签,ARM的是什么呢?
ARM SystemReady
ARM公司在ARM进入服务器领域不久就发现了这种需求,推出ARM ServerReady计划。随着ARM内核芯片的市场不断外延,ARM在2020年10月开发者峰会上,正式宣布升级版:ARM SystemReady [1]和白皮书[2] 。
ARM SystemReady的口号是“Just Work”(即开即用,不是仅仅工作),强调它的可用性和已验证性。它主要包括四种认证:
SystemReady SR:即以前的ServerReady,适用于server和workstation。它除了要求SBBR之外,SBSA和SBBR被替换为通用的BSA规范和SBSA规范。
SystemReady ES:适用于基础架构和物联网边缘设备等嵌入式服务器。
SystemReady IR:用于基础架构物联网和物联网边缘设备。
SystemReady LS:适用于当下火热的LinuxBoot来启动server。
标准可以说涵盖了从云端到物联网边缘计算中的所有部分。因为覆盖范围大,所以各个部分的标准要求各有不同:
来源:参考资料2
如果通过了基本启动安全要求(BBSR)的要求,还可以在Logo旁配享ARM特制小盾牌:
关于BSA、SBSA、SBBR和BBSR等标准大家可以在ARM官网或者System Ready Spec[3]页面 找到相关链接,并仔细阅读。如果大家留言足够踊跃,也许今后本专栏会专文介绍其中比较重要的SBBR和SBSA规范。
下面是专门整理的各种标准细节和测试套件ACS [4]细节,拿走不谢:
这里要特别一点,那就是UEFI和ACPI、DeviceTree(DT)的关系。我们可以看到,SystemReady IR固件spec是个奇怪的组合UEFI+DeviceTree。我们普通看到的系统都是UEFI+ACPI,或是uboot+DeviceTree,但是实际上,DT和UEFI并不矛盾,更有甚者,有些定制化奇怪的系统上甚至出现UEFI+ACPI+DT的怪异组合。这里采用DT主要是考虑物联网IOT系统使用DT更加简单。关于为什么在ARM中,ACPI要替代DT见参考资料5 。DT和ACPI的关系可以参考我的这篇文章:UEFI和ACPI
结论
ARM SystemReady一经推出,立刻受到众多小伙伴的欢迎 :
来源:参考资料6
值得一提的是,国产BIOS厂商百敖软件也是成员之一。ARM SystemReady目前已经认证了很多系统[7] ,其中除了国外大厂之外,还有不少国内的产品。相信未来,可以通过SystemReady的产品会越来越多。
最后,很多朋友在群里面问,让推荐UEFI的学习书籍。我还是推荐朋友Robin的新书《UEFI编程实践》:
参考资料
[1]SystemReady官网: https://developer.arm.com/architectures/system-architectures/arm-systemready
[2]白皮书: https://armkeil.blob.core.windows.net/developer/Files/pdf/white-paper/arm-systemready-whitepaper.pdf
[3]Specs: https://developer.arm.com/architectures/system-architectures/arm-systemready/specifications
[4]ACS官网: https://github.com/ARM-software/arm-systemready
[5]ACPI on ARM: https://www.kernel.org/doc/html/latest//arm64/arm-acpi.html#why-acpi-on-arm
[6]partners: https://www.arm.com/zh-tw/why-arm/architecture/systems/systemready-certification-program/partners
[7]SystemReady的最新进展: https://community.arm.com/arm-community-blogs/b/architectures-and-processors-blog/posts/progress-in-arm-system-ready-program