JH-7110软件系统迎来重磅升级,支持Linux+ RT-Thread的异构AMP双系统

01/30 19:46
阅读数 27

作者:StarFive


近期,为了应对工业自动化、电力互联网等工业场景对实时性的需求,赛昉科技在芯片实时性系统适配上取得突破性进展!JH-7110软件系统迎来重磅升级,支持Linux+ RT-Thread的异构AMP双系统,为芯片带来更强的系统实时性和稳定性,加速RISC-V工业实时解决方案落地。


一. JH-7110运行异构AMP


AMP,即非对称多处理,是指多核处理器的每个核之间相互隔离,可以相对独立地运行不同的操作系统或裸机应用程序,例如此次的Linux + RT-Thread。这种运行模式可提高系统实时性、稳定性,降低系统硬件成本,通常用于要求高度定制化、实时性和可靠性的工业领域。


 1.降低系统硬件成本


为了解决Linux系统主控实时性不足的问题,在传统应用中通常会采取外挂单片机的方式专门执行高实时性的程序,而采用AMP系统可以舍弃掉外置的单片机。


JH-7110搭载四核RISC-V CPU,此次实现的异构AMP使得3个CPU运行Linux,1个CPU运行RT-Thread RTOS,从而在开发中无需额外搭建其他系统硬件设备支持,仅需一套硬件电路可以实现复杂功能,大大降低了系统硬件成本。


2.提高系统实时性与稳定性


在RTOS的CPU运行实时的进程中,把部分实时驱动运行在RTOS中进行数据采集,将数据通过共享内存方式发回到Linux上,Linux端可以运行各种非实时的应用程序。这种方式既能保证系统实时性,又能保证在Linux上的应用进程不受影响。


随着工业自动化等领域对实时性能的高要求,RTOS的需求正不断增加。近期,Linux Kernel v6.6的PREEMPT_RT补丁

https://cdn.kernel.org/pub/linux/kernel/projects/rt/6.6/也已正式支持RISC-V架构。此外,赛昉科技已成功将JH-7110的大部分驱动代码合入v6.6的主线。


赛昉科技upstream状态(https://wiki.rvspace.org/en/project/JH7110_Upstream_Plan


二. AMP双系统(Linux + RT-Thread)示例


目前赛昉科技已展示在新一代SoC平台昉·惊鸿-7110(JH-7110)上运行异构AMP双系统(Linux + RT-Thread)的演示示例。


1.核间通信方式


两核通信使用标准的virtio-base的RPMsg(Remote Processor Messaging)协议,它定义了异构多核处理系统AMP中核与核之间进行通信时所使用的标准二进制接口。


  • Linux:在Linux内核代码中,RPMsg的代码主要位于drivers/rpmsg/下,相关的代码如下:


driver/rpmsg/virtio_rpmsg_bus.cdrivers/rpmsg/virtio_rpmsg_starfive.c
  • RT-Thread:使用开源的rpmsg-lite代码,也是开源的virtio-base的RPMsg代码,能够按照协议和Linux收发数据。核间的IPI中断和共享内存配合能实现异构核间的数据传输。RT-Thread代码路径如下:

bsp/starfive/jh7110/driver/rpmsg_lite


2.编译&运行


(1)连接Linux和RTOS的调试串口https://doc.rvspace.org/VisionFive2/Application_Notes/RT-Thread/VisionFive_2/RT_Thread/debug_serial.html),串口的波特率均设置为115,200。


(2)将编译https://doc.rvspace.org/VisionFive2/Application_Notes/RT-Thread/VisionFive_2/RT_Thread/configuration.html) 出来的u-boot-spl.bin.normal.out和visionfive2_fw_payload.img文件刷写到SPI NOR FLASH上。


(3)上电启动:RT-Thread启动很快,并且运行rpmsg linux test的测试程序,RT-Thread在等待Linux端发送IPI中断,Linux端是Rpmsg的master,需要配置virtio queue的控制内存和共享内存。

RT-Thread上电启动


(4)启动Linux:启动linux过程中,virtio_rpmsg_bus驱动会注册,virtio_rpmsg_starfive驱动也会被注册,注册完成后会发IPI中断给RT-Thread。

Linux启动


RT-Thread接受到IPI中断后,rpmsg_linux_test会继续执行,这时RT-Thread的finsh shell也能正常使用。

RT-Thread进程


(5)Linux端运行以下命令能看到 RT-thread发给Linux的IPI中断:

cat /proc/interrupts

IPI中断


(6)运行以下测试程序:

rpsmg_echo

测试结果


IPI中断情况:

cat /proc/interruptIPI5: 12 0 0 AMP rpmsg interrupts


AMP双系统(Linux + RT-Thread)的演示示例现已更新至RVspace文档中心:

https://doc.rvspace.org/VisionFive2/Application_Notes/RT-Thread/index.html



———————End——————

👇 点击阅读原文进入官网

本文分享自微信公众号 - RTThread物联网操作系统(RTThread)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部