注:這是一個由中國科學院軟件研究所合作資助的開源項目,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文章
19343瀏覽量
230229 -
芯片
+關注
關注
456文章
50938瀏覽量
424685 -
串口
+關注
關注
14文章
1555瀏覽量
76660
原文標題:RV64 異構多核處理器下實現RT-Thread和Linux 同時運行
文章出處:【微信號:RTThread,微信公眾號:RTThread物聯網操作系統】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論