【深度讨论】目前D1芯片引导启动流程过长的问题,以及对RISC-V下引导程序环境的思考
-
没有抬杠的意思,从我们项目实践来看,客观总结我们遇到的情况。
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不是想让谁大发慈悲地写这样的项目,而是我认为硬件设计实在太复杂,的确给上面的软件开发造成很大的障碍,大家做这种事情都没动力了(可能就转而选择友商的硬件产品了,不过在这个论坛上肯定不会明说,否则砸场子谁都不乐意)。或者如果全志牵头开仓库,提供一些支持,由开源社区完成也是可以的。
-
还有朋友表示听不懂,我再举个例子。
把系统启动可以看作是往洞里面拧螺丝,只要洞的大小一样,螺丝肯定能拧进去。
有人和我抬杠:那航母的螺丝和玩具的螺丝能一样吗?我这里只说能不能拧进去,我并没有说性能如何。拧都是能拧进去的。
用SBI程序启动操作系统,无论操作系统多复杂,肯定能启动。但是性能如何我就不知道了。我们主要回答的问题是能不能启动,性能是另一回事。
-
-
对于xboot而言,BROM->XBOOT,这种是不是更简单。
-
@tripod9 就这个意思,各种引导程序都可以,只要只有一个引导程序就好,别整太多复杂的。(话说西数前几年的ppt真的是乱讲……很多问题)
-
这篇文章说得就很对:
-
说个问题,芯片sram一般不大,需要先加载执行一段dram初始化代码,然后再加载平台无关引导程序到dram执行。你所说的维护模式下,需要集成dram初始化代码,存储驱动代码,这会使需要的sram非常大,这不符合产品的设计的。
-
@zhuzhizhan 不是这个意思。能烧录的部分很大,不能改的部分很小,这就对了。写死的那部分并不包含驱动,它只包含几条汇编指令,来跳转到相应的存储器,以便能改的软件启动。
-
@luojia65 没太理解你说的几个代码就跳转的流程,但dram初始化代码,存储驱动代码得有,这些都得加载到sram或dram上运行。
-
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号