没有抬杠的意思,从我们项目实践来看,客观总结我们遇到的情况。
D1是RISC-V芯片。如果使用ARM系芯片,ARM的引导程序是有成熟的套路,大概可以归纳为:
0阶段启动→1阶段启动→维护模式→平台相关引导程序→系统内核
RISC-V其实对操作系统的运行环境是有统一规定的。这个环境被叫做SBI,完整的启动流程大致可以表示为:
维护模式→平台无关引导程序→系统内核
没错就这么简单。我本人也是SBI规范的起草者之一,相比于以前非常复杂的启动过程,RISC-V在软件上也有了统一的规定。这就给以前所谓的“移植”提供相当大的遍历,因为引导程序环境只要兼容这个接口,就能启动任何基于这个接口的操作系统。
有些人直接告诉我:Linux这么复杂,RT-Thread这么复杂,你这个程序肯定只能启动简单的系统,复杂的肯定启动不了。我就是SBI标准的贡献者之一,我可以负责任地讲:完全不是这回事。对RISC-V下引导程序的误会,主要就来源于很多朋友以为引导程序很复杂,对这方面不了解,其实是很简单的。
现在D1的情况是这样的:
0阶段启动→1阶段启动→维护模式→平台相关引导程序→平台无关引导程序→系统内核
太复杂了!希望下一代D2、D3这些芯片重新设计引导过程,如果是做成RISC-V系列的,尽量只用RISC-V的标准。引导程序的软件设计如果有问题,我恰好就是SBI标准的贡献者,自己也维护一些引导程序,可以提供帮助。
===
鉴于很多朋友对RISC-V的引导程序环境(从使用上)了解不多,我简单的做一个比喻。
以前各个手机公司都搞自己的充电接口,诺基亚有诺基亚的,小米有小米的。后来,Type-C接口和PD协议出现了,只要是Type-C手机,随便拿一条充电线就能充电,管他是诺基亚、小米还是华为的,管他是大厂还是三无山寨机,不说充电速度快不快,肯定是能充的。
每个厂商针对自己手机的性质有优化,用自己原装的充电器,他们自己的快充协议会识别,这样就能获得更快的速度。
反过来讲,管他是官方充电器还是第三方充电器,绝对可以给手机充电,不过安全性和速度就由充电器本身决定了,和手机没关系。
SBI规范相比于以前的UEFI之类,就好像Type-C相比于以前小米诺基亚自己的充电接口。只要引导程序支持SBI规范,管他是谁家的操作系统,管他简单还是复杂,性能好不好我不说,启动是绝对可以启动的。
但是,每家操作系统对自己的引导程序会有优化,如果使用原厂的引导程序,能获得更好的性能。如果使用第三方引导程序,可能可以获得第三方提供的更多功能,如调试服务器、无盘启动等等。
无论使用谁家的引导程序,绝对可以启动,但是性能和功能就由引导程序决定了。
引导程序可以选择各个厂家的,目前SBI很多公司都自发地去用opensbi。在某些领域下,opensbi的使用是受到限制的,而且opensbi的开源模式要求分支后合并,对产权代码不友好。
我的项目rustsbi完美解决这些非技术问题,模块化开发,不需要提交代码到主分支,鼓励厂家自己发布引导程序实现。
rustsbi已经支持多款友商芯片,奈何D1的引导过程太复杂,很多细节只有原厂知道,目前我们真不敢写。
给我们仓库点个星吧:
https://github.com/rustsbi/rustsbi
不是想让谁大发慈悲地写这样的项目,而是我认为硬件设计实在太复杂,的确给上面的软件开发造成很大的障碍,大家做这种事情都没动力了(可能就转而选择友商的硬件产品了,不过在这个论坛上肯定不会明说,否则砸场子谁都不乐意)。或者如果全志牵头开仓库,提供一些支持,由开源社区完成也是可以的。