注:这是一个由中国科学院软件研究所合作资助的开源项目,rt-thread社区参与,并推动更新到upstream。这个过程中也得到了张健,董波(无锡控博),李志锐(厦门大学)的支持,这里一并表示感谢。
risc-v指令集架构在这几年中异军突起,受到大家广泛的关注,认可,参与,实践。越来越多的厂商选择使用risc-v,从单独实验性芯片的尝试,到备份芯片,到辅助芯片,到独立芯片,一步步应用到实际的产业应用领域。例如最近平头哥就针对低端到中高端发布了开源的risc-v处理器ip core,e902(rv32),e906(带cache的rv32),c906(单核rv64),c910(多核rv64),同时在上面也支持linux,rt-thread等开源操作系统。
与此同时rt-thread团队也看到了未来异构多核芯片领域会有更多的应用需求,和中国科学院软件研究所的想法不谋而合,融合risc-v的异构多核系统这个项目就是在这样的一个背景下产生,所以双方联合来推进,并一起推进到系列开源项目的upstream,让更多人易于使用,让产业界受益。
架构说明
本项目以qemu模拟的虚拟硬件:qemu-riscv64-virt为硬件平台,上面具备dual rv64 core,分别运行linux和rtos(rt-thread)。对于这类应用,rv64在运行时会涉及到三种运行模式,m-mode,s-modem,u-mode,如下面的架构图。
m-mode模式,机器模式,一般会运行一些简单的程序;如果芯片只包含机器模式,可以运行一些裸机程序或者rtos,多见于mcu芯片;
h-mode模式,是虚拟化运行模式,此种情况下未涉及,后续不过多提及;
s-mode, supervisor mode模式是管理者模式,用于运行例如linux内核的操作系统内核;
u-mode模式,是用户模式,运行用户态应用程序;而对于rtos来说,一般不会运行在层。
在这样的方式下,硬件底层是rv64的双核,分别运行linux和rtos操作系统,整体的架构如下所示:
在这样的方式下,可以由linux来完成一些复杂的工作,例如存储,网络,显示等;而rtos则可以用于实时控制,这里运行rt-thread开源操作系统。在linux和rtos之间,可以通过标准的openamp框架进行通信,异系统间的数据交互。
openamp说明
openamp是xilinx和mentor graphic于2014年发起的一个开源项目,旨在提供一份协处理器的标准通信框架。openamp是对ohad ben-cohen在2011年linux 3.4.1引入的rpmsg, remoteproc的在异构处理器上的实现,并采用bsd许可协议开源。
lremoteproc用于linux作为master来控制和管理协处理器,对协处理器进行power off/on,reset,load firmware等管理操作;
lrpmsg用于多系统间的ipc消息交互。
openamp本身包括几个部分:
llibmetal,主要涉及openamp在不同底层系统上的对接,分成了对linux,rtos及裸机的支持。
lopen-amp,提供对virtio,rpmsg,remoteproc等的实现;
openamp本身以cmake方式编译,因为原来只包括arm方式的交叉编译方式,所以这个项目中加入对risc-v交叉编译方式的支持。默认with_proxy等相关的特性关闭。
编译 & 运行
针对这样一套多操作系统的异构系统,我们把它命名成pomegranate(石榴,喻意多子,多系统),单独放在github和gitee上,可以按照仓库中的方式进行编译,并使用起来:
https://github.com/rt-thread/rtthread-pomegranate
假设在ubuntu 18.04上,来编译和使用,需要先把pomegranate clone到本地,例如使用github:
git clone --recursive https://github.com/rt-thread/rtthread-pomegranate
然后运行下面的脚本,先把需要的标准包下载下来,并展开:
。/dn_prepare.sh
这个脚本会自动下载需要用到的代码,例如linux,u-boot,qemu等,以及工具链(针对linux的工具链,针对rt-thread的工具链等),并对需要打补丁的代码进行打补丁。
然后编译只需要执行下面的shell脚本:
。/build.sh
执行build.sh时,它会分别对涉及到软件包进行编译,例如opensbi,u-boot,linux,open-amp,rt-thread等,编译无误会生成相应的程序文件,及把应用程序复制到linux的rootfs中。
其中对于一些可以单独运行的软件,例如opensbi、u-boot、linux、rt-thread等,在各自分别的目录下有一份run.sh,执行即可使用qemu模拟器来模拟运行。
。/run.sh
这份qemu做了简单的改造,模拟出来两份串口分别给linux和rt-thread使用。rt-thread进行简单的修改,可以让它运行在s-mode下,并支持运行在任意核上。openamp上支持risc-v方式的交叉编译等。这部分代码后续都会推进到各自的upstream端。
未来展望
异构多核处理器并不是一个新事物,例如在arm芯片上已经存在大量的cortex-a核+cortex-m/r核芯片,并应用于各类领域,如手机基带处理器,实时工业控制处理器,车载mpu安全处理器。
在一颗芯片上同时具备arm核 + risc-v核的芯片也逐步出现,openamp是搭建起异构系统间软通信的一座桥梁,未来可能还不仅限于此,会让cortex-a + cortex-m/r或 risc-v处理器在使用上更便利,甚至感受不到异构的存在,在多系统间融合,甚至程序的无缝迁移。
集成电路是如何制成的?
嵌入式设备手机短信交互模块的设计
BitGo现在已经为超过20种加密货币提供了托管解决方案
PAL/无色滚动是什么意思
电阻串联与并联有什么区别_电阻串联和并联的区别
基于RV64异构多核处理器下如何实现RT-Thread和Linux 同时运行
码灵半导体荣获“2023年厦门市创新型中小企业”称号
关于介绍控制系统故障判断具体的方法
研究证实:微软Window Phone的兼容性最强悍
高速并行光互联技术及其应用
今年科技类基金发行火爆,多只股票ETF获监管受理
怎么解决双显DP启动慢的问题
晶元光电对 V-TAC USA Corp. (“V-TAC”)提出专利侵权诉讼
人工智能快速发展趋势下,中国该如何应对?
美云智数:【数字制造 工业互联】5G+工业互联网数智之路
手把手教你在RT-THREAD bsp上运行pikascript脚本点亮小灯
最新智能电子吊钩秤解决方案,智能称重系统的应用
手机无线单芯片解决方案演进之路
HTC推出第一款拍摄3D影像双摄像头的手机
华为荣耀里唯独这一款华为荣耀8,美感和颜值并存!但从未降价过,关键是?