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