查看原文
其他

RISC-V UEFI生态现状如何?赛昉星光开发板上手实例,和UEFI生态短板修补神器:MultiArchUefiPkg

wolf uefiblog UEFI社区 2023-12-29
点击上方“公众号” 可以订阅哦!

RISC-V发展如火如荼,尤其是在国内,各种RISC-V公司层出不穷,产品覆盖了从MCU、笔电到服务器CPU的各个层次,据悉国内厂家超过200家。RISC-V的开放、免费和开源,让大家看到了打破美国芯片霸权,实现弯道超车的希望。相信大家或多或少都在各种媒体上看到或者听到RISC-V的各种突破,但反应在周边生活中的实例却很少,这和目前RISC-V主要应用在大家缺乏感知的MCU中,而大芯片性能还在爬坡有关。更重要的是,如果RISC-V应用在主流通用性产品中,生态单板问题无法克服,毕竟ARM直到最近还在努力补足和x86之间的生态差距,更何况新生代RISC-V呢。

今年阿里平头哥召开了生态大会,我也参加了大会,并专门写了一篇文章:3到5年后,RISC-V芯片将无处不在

除了对RISC-V架构的成熟做了肯定,也对其迅速发展原因进行了探讨。小半年过去了,RISC-V的发展呈现加速趋势,生态短板在各个组织和厂家的努力下正在迅速改善。我经常在各个场合推荐RISC-V,常会被朋友问到,什么时候可以看到量产的RISC-V笔电、台式机和服务器产品,甚至是国产产品?是啊,也许只有这样,RISC-V才真正成功,实现大众对它的期待。

虽然据我所知,市面上曾经已经有了两款RISC-V的笔电上市销售,但可以这么说,它们都是玩票性质的原型机,普通消费者完全不可用,也买不到。什么时候才能有符合普通用户使用体验的RISC-V笔电或者台式机上市呢?它的操作界面和性能即使不能和x86一致,至少需要和ARM笔电追平,才能说是一个相对成熟的产品,才有标志性意义。据我观察和预估,这个时间点应该很快就会到来,快则半年到一年,慢则最多两年,RISC-V笔电的UEFI和Linux体验,就可以和ARM相比了。

对于RISC-V的爱好者,或者看好这个赛道的固件、操作系统或应用的从业者来说,现在其实就可以开始上手试玩RISC-V了,毕竟这个风口起来了,说不定也可以跟着飞起来呢。本文就带大家上手一款可以方便买到的RISC-V开发板,看看它的情况。另外作为UEFI的固件专栏,本文主要从UEFI固件的角度,了解这款开发板UEFI的ready情况,短板和修补神器,以及还有哪些不足。

赛舫VisionFive 2单板

众多软硬件工程师对新平台新架构的了解,往往开始于一块好用并且便宜的开发板。这点ARM世界做的非常好,Arduino和树莓派是很多人开始接触ARM并且喜欢上ARM的启蒙老师。RISC-V世界也有不少这种开发板,这里推荐国产的赛舫(StarFive)的昉・星光 2(VisionFive 2)开发板:

它配备赛舫的JH7110 SOC,兼容树莓派的40pin GPIO引脚:

硬件详细信息,参见官网【1】 ,QuickStart Guide【2】 和Wiki【3】 。

它的主板固件不同于其他大多数RISC-V CPU的U-Boot方案,为了用于通用市场,已经适配了UEFI,并且完全开源在StarFive的GitHub的公仓【4】 。OpenSBI 【5】部分以Lib的形式包在UEFI image中。

它的操作系统已经适配了ubuntu,请在ubuntu官网下载 【6】,未开放源码,源码需要问ubuntu索取。比较独特的是,著名国内操作系统厂商统信旗下深度OS Deepin也已经适配了,可以自由下载官方Image 【7】。

RISC-V版的UEFI X86Emulator

开发板CPU赛舫JH7110 SOC自带GPU IP IMG BXE-4-32 MC1,但遗憾的是,其缺乏UEFI RISC-V GOP驱动,所以不能在UEFI BIOS中显示任何信息。这让开发板的使用体验和普通PC差别大了很多,也反映出RISC-V的生态短板,也给我们Enable这个主板造成不少麻烦。怎么办呢?

所幸我们了解到Intel的工程师已经将x86Eumlator移植到RISC-V上,叫做MultiArchUefiPkg并且开源了【8】 ,能不能借助它来驱动市面上已有的x86显卡来提供UEFI图形显示呢?为了达到这个目的,我们需要做两步,首先是在VisionFive2上移植MultiArchUefiPkg,接下来要解决VisionFive2上没有PCIe插槽的问题。

MultiArchUefiPkg来源于x86Eumlator项目,关于后者,我已经专文介绍:

BIOS中的仿真器,解决ARM和RISCV板卡生态匮乏的神器:X86Emulator

原版的x86Emulator仅支持在ARM的AARCH64(64位ARM ISA)上模拟x64的内容,不支持RISC-V。Intel的工程师将它移植到RISC-V上,支持仿真x86,甚至是AARCH64的环境来驱动x86或者是ARM的UEFI驱动。它的技术细节不变和x86Emulator一样,这里不再赘述。我们需要将MultiArchUefiPkg移植到VisionFive2上即可。

VisionFive2要用市面上已有的显卡,需要PCIe x16的插槽,这在小小的单板上当然是不可能提供的。所幸VisionFive2为了支持M.2 NvME,提供M.2接口的PCIe插座,我们只需要在某宝上购买一个M.2转PCIe x16的转接卡即可。

我们共试验了两款显卡,一块A卡W330亮机卡,一块N卡。其中A卡非常顺利点亮,它只有x86的UEFI GOP驱动,这也证明这种用MultiArchUefiPkg来解决UEFI生态的可行性。而N卡则产生了Assert,原因还待查明。

效果

点亮后,我们将产品化BIOS的一些功能移植到VisionFive2开发板上,目的是提供通用产品的使用体验,效果不错:








体验下来,字符界面的BIOS的显示,经过MultiArchUefiPkg将GOP驱动中x86指令翻译成RISC-V,稍微显得慢一些,但尚属可以接受。

有同学可能会问,UEFI下GOP驱动可以通过MultiArchUefiPkg来转译,那Linux下怎么办?Linux的驱动大多开源的,可以方便的重新编译一下打包进来就行了,而UEFI设备驱动通常是闭源的,不好自己加RISC-V的支持,这才显示出来MultiArchUefiPkg这种仿真环境对生态的价值,谓其神器。

缺憾和Next Step

大家也许注意到了,Ubuntu和Deepin都为VisionFive2做了单独的适配,并提供单独定制的OS image下载,这是为什么呢?我在这篇文章中介绍了原因:RISC-V架构发展现状的碎片化隐忧

VisionFive2尽管做了UEFI适配,但缺乏统一标准和ACPI的支持,导致硬件抽象能力不足,OS分支化严重。这点需要业界继续努力。我们也会跟进支持,并加入图形化BIOS和其他产品化功能,来促进RISC-V在通用领域的产品化速度。

参考资料

【1】VisionFive2官网:https://www.starfivetech.com/site/boards

【2】QuickStart Guide:https://doc-en.rvspace.org/VisionFive2/Quick_Start_Guide/VisionFive2_QSG/board_apperance.html

【3】Wiki https://github.com/starfive-tech/edk2/wiki

【4】VisionFive2 UEFI固件源码:https://github.com/starfive-tech/edk2-platforms

【5】OpenSBI源码:https://github.com/starfive-tech/edk2-platforms/tree/vf2_jh7110_devel/Silicon/RISC-V/ProcessorPkg/Library/RiscVOpensbiLib

【6】VisionFive2 Ubuntu OS image:https://ubuntu.com/download/risc-v

【7】Deepin OS Image:https://cdimage.deepin.com/RISC-V/VisionFive-v2-image/

【8】MultiArchUefiPkg源码:https://github.com/intel/MultiArchUefiPkg/tree/main



继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存