RV64 异构多核处理器下实现RT-Thread和Linux 同时运行

f93bf27e7047fee744102e0d560f2bdd.png

70b76d7ba28c9cad0a923c2d77d6e21b.png

注:这是一个由中国科学院软件研究所合作资助的开源项目,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,如下面的架构图。

3752095d72493387355b5b471ef70d2d.png

M-Mode模式机器模式,一般会运行一些简单的程序;如果芯片只包含机器模式,可以运行一些裸机程序或者RTOS,多见于MCU芯片;

H-Mode模式,是虚拟化运行模式,此种情况下未涉及,后续不过多提及;

S-Mode, Supervisor Mode模式是管理者模式,用于运行例如Linux内核的操作系统内核;

U-Mode模式,是用户模式,运行用户态应用程序;而对于RTOS来说,一般不会运行在层。

在这样的方式下,硬件底层是RV64的双核,分别运行Linux和RTOS操作系统,整体的架构如下所示:

4bf3da4513909b813603990580e706d0.png

在这样的方式下,可以由Linux来完成一些复杂的工作,例如存储,网络,显示等;而RTOS则可以用于实时控制,这里运行RT-Thread开源操作系统。在Linux和RTOS之间,可以通过标准的OpenAMP框架进行通信,异系统间的数据交互。

OpenAMP说明

ed370c6ee21cf376faf957a4afa6cf69.png

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本身包括几个部分:

9087ca691bd7b68a56fadbe14ef8087f.png

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处理器在使用上更便利,甚至感受不到异构的存在,在多系统间融合,甚至程序的无缝迁移。

e38450145f2fdfe13e30f7c23e0d8b2e.png

你可以添加微信17775982065为好友,注明:公司+姓名,拉进RT-Thread官方微信交流群!

611b220796e15bca36d3d9422d8ef7ef.gif

👇 点击阅读原文进入官网

  • 2
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
好的,我会根据你的要求帮你解答这个问题。以下是在qemu-riscv64上移植rt-thread并搭建weston环境的具体步骤细节: 1. 准备工作 首先,你需要安装RISC-V工具链和qemu-riscv64模拟器。你可以从官方网站下载最新版本的工具链和模拟器。 2. 获取rt-thread代码 你需要从rt-thread官方网站下载最新的代码。rt-thread是一个开源的实时操作系统,适用于嵌入式系统。 3. 编译rt-thread 在编译rt-thread之前,你需要设置交叉编译环境。你可以在rt-thread的根目录下执行以下命令: ``` export RTT_CC=riscv64-unknown-elf-gcc export RTT_EXEC_PATH=/path/to/riscv64-unknown-elf/bin export RTT_TOOL_PATH=/path/to/riscv64-unknown-elf/lib/gcc/riscv64-unknown-elf/<version> ``` 然后,你可以执行以下命令来编译rt-thread: ``` scons --target=rv64imac-qemu --riscv64-unknown-elf-gcc=/path/to/riscv64-unknown-elf-gcc ``` 这将会在rt-thread的根目录下生成一个rtthread.elf文件。 4. 启动qemu-riscv64模拟器 你需要启动qemu-riscv64模拟器,并将rtthread.elf文件加载到模拟器中。你可以在命令行中执行以下命令: ``` qemu-system-riscv64 -M virt -nographic -m 256M -kernel rtthread.elf ``` 这将会启动qemu-riscv64模拟器,并将rtthread.elf文件加载到模拟器中。 5. 搭建weston环境 在rt-thread中,你可以使用weston作为图形界面。你需要在rt-thread中启动weston,并将其连接到你的主机上。 首先,你需要在模拟器中安装weston。你可以使用以下命令来安装weston: ``` opkg install weston ``` 然后,你需要启动weston。你可以在模拟器中执行以下命令: ``` weston-launch ``` 这将会启动weston并将其连接到你的主机上。 6. 测试 现在,你可以在rt-thread中使用weston来测试图形界面。你可以在模拟器中运行以下命令来启动一个简单的weston应用程序: ``` weston-simple-dmabuf ``` 然后,你可以在你的主机上看到weston应用程序的输出。 以上就是在qemu-riscv64上移植rt-thread并搭建weston环境的具体步骤细节。希望能对你有所帮助。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值