注:這是一個由中國科學院軟件研究所合作資助的開源項目,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處理器在使用上更便利,甚至感受不到異構的存在,在多系統間融合,甚至程序的無縫遷移。
編輯:jq
-
處理器
+關注
關注
68文章
20255瀏覽量
252340 -
芯片
+關注
關注
463文章
54010瀏覽量
466166 -
串口
+關注
關注
15文章
1619瀏覽量
82838
原文標題:RV64 異構多核處理器下實現RT-Thread和Linux 同時運行
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
恩智浦亮相RT-Thread 20周年開發者大會
RT-Thread首款低功耗AI產品預售: Edgi Talk
手搓一個RT-Thread工地巡檢機器人要幾步? | 技術集結
基于RT-Thread的RPMsg-Lite異構多核通信原理分析 | 技術集結
【直播預告】高性價比智慧視覺處理器FH8626V300L解析,與RT-Thread全棧開發實戰 | 問學直播
在蜂鳥處理器上進行RT-Thread+ESP8266 wifi模塊開發
【好書推薦】RT-Thread第20本相關書籍!《嵌入式實時操作系統RT-Thread原理與應用》| 技術集結
揭秘!基于RT-Thread探究“優先級反轉”下的任務調度究竟是什么樣的?| 技術集結
RT-Thread榮獲2025優秀開源項目 | 新聞速遞
RT-Thread BSP全面支持玄鐵全系列RISC-V 處理器 | 技術集結
揭秘RT-Thread上的AUTOSAR CP系統
人形機器人敏捷開發新路徑:RT-Thread以軟件底座破解復雜系統難題 | 新聞速遞
RT-Thread 上如何實現 SLAAC?
RT-Thread睿賽德攜“程翧整車基礎軟件OS”亮相車展,多核虛擬化跨域驅動智能汽車發展
基于RV64異構多核處理器下如何實現RT-Thread和Linux 同時運行
評論