V853芯片包含兩個CPU。一個是主核心Arm A7 CPU,運行Tina Linux(全志自研Linux)系統(tǒng),為芯片主系統(tǒng);一個是RISC-V E907輔助CPU,運行Melis(全志自研RTOS)系統(tǒng),主要功能是提供通用算力補充、輔助 Linux 實現(xiàn)快起和低功耗管理等功能。
A7 - Linux系統(tǒng)
V853主核心 A7上運行的是Tina Linux系統(tǒng)。Tina Linux是全志針對AIoT類產(chǎn)品,基于Linux內(nèi)核深度定制的嵌入式系統(tǒng)。
在 Tina Linux 中,提供 AMP 與 RPMsg 對接 E907
Linux remoteproc 管理控制 E907
RPMsg 與 E907 通訊
E907 - RTOS系統(tǒng)
V853 輔助核心 E907 上運行的是全志自研 RTOS 系統(tǒng) Melis。其獨立于 A7 主核心中的 Linux 系統(tǒng)??梢元毩⑦\行。
在 E907 Melis 中,提供 OpenAMP 軟件框架來與 A7 Linux 系統(tǒng)進行通信。
提供了處理器的生命周期管理(LCM,Life Cycle Management),與 Linux 的 remoteproc 兼容
提供了處理器間的消息傳輸機制,與 Linux 的 RPMsg 兼容
異構(gòu)系統(tǒng)啟動流程
首先,由芯片內(nèi)部的 BORM 尋找啟動介質(zhì),在 V853 開發(fā)板上便是 eMMC 儲存器。找到啟動介質(zhì)后會運行其中的 BOOT0 代碼。BOOT0 會在 A7 主核心中運行 Linux 系統(tǒng),也會在 E907 核心中運行 RTOS 系統(tǒng)。啟動的兩個系統(tǒng)是獨立運行的。
異構(gòu)系統(tǒng)的通信
V853 的異構(gòu)系統(tǒng)通訊在硬件上使用的是 MSGBOX,在軟件層面上使用的是 AMP 與 RPMsg 通訊協(xié)議。其中 A7 上基于 Linux 標準的 RPMsg 驅(qū)動框架,E907基于 OpenAMP 異構(gòu)通信框架。
V853 所帶有的 A7 主核心與 E907 輔助核心是完全不同的兩個核心,為了最大限度的發(fā)揮他們的性能,協(xié)同完成某一任務,所以在不同的核心上面運行的系統(tǒng)也各不相同。這些不同架構(gòu)的核心以及他們上面所運行的軟件組合在一起,就成了 AMP 系統(tǒng) (Asymmetric Multiprocessing System, 異構(gòu)多處理系統(tǒng))。
由于兩個核心存在的目的是協(xié)同處理,因此在異構(gòu)多處理系統(tǒng)中往往會形成 Master - Remote 結(jié)構(gòu)。主核心啟動后再啟動輔助核心。當兩個核心上的系統(tǒng)都啟動完成后,他們之間就通過 IPC(Inter Processor Communication)方式進行通信,而 RPMsg 就是 IPC 中的一種。
在AMP系統(tǒng)中,兩個核心通過共享內(nèi)存的方式進行通信。兩個核心通過 AMP 中斷來傳遞訊息。內(nèi)存的管理由主核負責。
AMP 系統(tǒng)在每個通信方向上都有兩個緩沖區(qū),分別是 USED 和 AVAIL,這個緩沖區(qū)可以按照 RPMsg 中消息的格式分成一塊一塊鏈接形成一個環(huán)。
當主核需要和從核進行通信的時候可以分為四步:
主核先從USED中取得一塊內(nèi)存(Allocate)
將消息按照消息協(xié)議填充
將該內(nèi)存鏈接到 AVAIL 緩沖區(qū)中(Send)
觸發(fā)中斷,通知輔助核有消息處理
反之,從核需要和主核通信的時候也類似:
主核先從AVAIL中取得一塊內(nèi)存(Allocate)
將消息按照消息協(xié)議填充
將該內(nèi)存鏈接到 USED 緩沖區(qū)中(Send)
觸發(fā)中斷,通知主核有消息處理。
既然 RPMsg 是一種信息交換的協(xié)議,與TCP/IP類似,RPMsg 協(xié)議也有分層,主要分為三層,分別是傳輸層、MAC層和物理層。
其中 MAC層 的 VirtIO 是一種I/O 半虛擬化解決方案,是一套通用 I/O 設備虛擬化的程序,是對半虛擬化 Hypervisor 中的一組通用 I/O 設備的抽象。提供了一套上層應用與各 Hypervisor 虛擬化設備之間的通信框架和編程接口,減少跨平臺所帶來的兼容性問題,大大提高驅(qū)動程序開發(fā)效率。
RPMsg 總線上的消息都具有以下結(jié)構(gòu),包含消息頭和數(shù)據(jù)兩個固定的部分,該消息格式的定義位于drivers/rpmsg/virtio_rpmsg_bus.c中,具體定義如下:
struct rpmsg_hdr { u32 src; u32 dst; u32 reserved; u16 len; u16 flags; u8 data[];} __packed;
異構(gòu)系統(tǒng)的控制
在異構(gòu)系統(tǒng)中,不止需要消息的傳輸,還需要相關控制。例如主核對輔助核心的開啟,加載固件,關閉等等。這就需要用到 remoteproc 框架。
remoteproc 框架支持對不同平臺,不同架構(gòu)的處理器進行控制,可以監(jiān)控輔助核心的運行情況。
對于 V853 來說,remoteproc 用于對 E907 進行生命周期管理,一般來說包含有加載固件、 檢測遠端處理器是否崩潰等功能。它在加載遠端處理器的固件時,會根據(jù)固件中定義的 resource table 來申請資源,并創(chuàng)建 VirtIO 設備。
審核編輯 :李倩
-
處理器
+關注
關注
68文章
19404瀏覽量
230957 -
Linux系統(tǒng)
+關注
關注
4文章
595瀏覽量
27483 -
通訊
+關注
關注
9文章
911瀏覽量
35031
原文標題:詳解全志V853上的ARM A7和RISC-V E907之間的通信方式
文章出處:【微信號:gh_79acfa3aa3e3,微信公眾號:全志在線】歡迎添加關注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關推薦
評論