2024.01.30
RISC-V产业化,工业场景难以忽视。自昉·惊鸿-7110(JH-7110)芯片量产交付以来,赛昉科技积极推动JH-7110在工业控制、防火墙、路由器、网关等工业场景的落地。JH-7110搭载64位四核RISC-V CPU,采用28nm工艺,工作频率1.5GHz。JH-7110拥有极佳的PPA平衡,提供工业场景所需丰富接口,满足工业宽温要求,并且已经实现量产,可稳定给客户供货。
根据赛昉科技的芯片落地经验,在芯片规格达标的前提下,不同的工业场景将催生出数量众多的软件需求,最终软件的成熟度将决定芯片能否被广泛应用。赛昉科技在RISC-V软件生态建设上贡献颇多。
近期,为了应对工业自动化、电力互联网等工业场景对实时性的需求,赛昉科技在芯片实时性系统适配上取得突破性进展!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.c
drivers/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