在當(dāng)今的電子技術(shù)領(lǐng)域,嵌入式系統(tǒng)的發(fā)展日新月異,而異核通信技術(shù)在其中扮演著至關(guān)重要的角色。OpenAMP 軟件框架作為針對非對稱多處理(AMP)系統(tǒng)開發(fā)應(yīng)用程序所需的軟件框架,為實(shí)現(xiàn)核間通信提供了強(qiáng)大的支持。用戶通過調(diào)用該框架組件中的 API,就能輕松實(shí)現(xiàn)核間通信。
在具體的硬件架構(gòu)中,以 STM32MP157 為例,其 A7 內(nèi)核和 M4 內(nèi)核通過 IPCC 中斷機(jī)制來通知對方在共享內(nèi)存中有新的數(shù)據(jù)或者數(shù)據(jù)已經(jīng)被處理。需要注意的是,在 A7 這邊已經(jīng)默認(rèn)開啟了 IPCC 中斷,而 M4 一定要開啟 IPCC 中斷,否則 M4 就無法使能 OpenAMP。同時,HSEM(硬件信號量)默認(rèn)開啟,它的作用是確保所有內(nèi)核可以有序地訪問公共資源。內(nèi)核能夠使用信號量來保證對外圍設(shè)備的獨(dú)占訪問和信息交換,這對于系統(tǒng)的穩(wěn)定運(yùn)行至關(guān)重要。
從系統(tǒng)架構(gòu)的角度來看,存在同構(gòu)和異構(gòu)的概念。如果所有的 CPU 或的架構(gòu)都一樣,那么稱為同構(gòu);反之,如果所有 CPU 或的架構(gòu)有不一樣的,那么就稱為異構(gòu),像 STM32MP157 有 A7 和 M4 核就是典型的異構(gòu)情況。多核操作系統(tǒng)體系主要包括 SMP(對稱多處理)結(jié)構(gòu)、AMP(非對稱多處理)結(jié)構(gòu)和 BMP(邊界多處理)結(jié)構(gòu)。SMP 結(jié)構(gòu)一般運(yùn)行在同構(gòu)處理器下,由一個 OS 負(fù)責(zé)協(xié)調(diào)兩個處理器,兩個處理器共享內(nèi)存,每個運(yùn)行的應(yīng)用程序地址相同,通過 MMU(內(nèi)存管理單元)將它們映射到主存的不同位置。而 AMP 結(jié)構(gòu)則是每個內(nèi)核運(yùn)行自己的 OS 或同一 OS。
基于 OpenAMP,生命周期管理是通過 Remoteproc 來實(shí)現(xiàn)的,內(nèi)核間通信是通過 RPMsg 來管理的。IPCC 通信框架在異核通信中也起著關(guān)鍵作用,郵箱依賴于 IPCC,STM32MP157 的 IPCC 硬件模塊有 6 個雙向通道,每個通道分為兩個子通道,共有 12 個子通道。處理器之間交互的數(shù)據(jù)存放于共享內(nèi)存中,IPCC 中斷機(jī)制用于當(dāng)一個數(shù)據(jù)包被放入共享內(nèi)存時,通知另一個 CPU 有新的數(shù)據(jù)包需要處理。A7 內(nèi)核的中斷控制器是 GIC,M4 內(nèi)核的中斷控制器是 NVIC,且處理器之間要交互的數(shù)據(jù)是在共享內(nèi)存中傳輸?shù)模?IPCC 處封裝了郵箱(Mailbox)框架,用于通知 CPU 在共享內(nèi)存中有數(shù)據(jù)要處理。
郵箱框架的工作流程較為復(fù)雜。首先要注冊郵箱控制器,郵箱客戶端發(fā)送數(shù)據(jù)前需先申請通道,接著客戶端發(fā)送數(shù)據(jù)并記錄數(shù)據(jù),郵箱控制器將底層接收到的數(shù)據(jù)回調(diào)給上層應(yīng)用,當(dāng)數(shù)據(jù)發(fā)完時,郵箱控制器通知上層當(dāng)前數(shù)據(jù)已經(jīng)發(fā)送完成,郵箱客戶端釋放通道。RemoteProc 軟件框架解決了遠(yuǎn)程處理器生命周期的問題,RPMsg 軟件框架解決了核間通信的問題,M4 主要依賴 OpenAMP 庫中已有的軟件框架來實(shí)現(xiàn)和 A7 通信。
Virtio(虛擬化模塊)中的 vring 是指向數(shù)據(jù)緩沖區(qū)指針的 FIFO 隊列,有兩個單向的 vring,一個用于發(fā)送到遠(yuǎn)程處理器的消息,另一個用于從遠(yuǎn)程處理器接收的消息,兩個 vring 組成一個環(huán)形,其緩沖區(qū)就是兩個處理器的共享內(nèi)存。在實(shí)際操作中,A 核遠(yuǎn)程啟動 M4 核(遠(yuǎn)程協(xié)處理器)有特定的腳本指令,例如加載固件、啟動固件和關(guān)閉固件運(yùn)行等操作。而且 A7 和 M4 之間通過 RPMsg 進(jìn)行核間通信時,需要 A7 發(fā)送條消息,RPMsg 通道才會被激活,通道激活以后,M4 才能給 A7 發(fā)送數(shù)據(jù)。
以下是相關(guān)的圖片說明:
- 異核通信框架:

- SMP 結(jié)構(gòu)示意圖:

- AMP 結(jié)構(gòu)示意圖:

- IPCC 通信框架:

- IPCC 硬件模塊通道示意圖:

- 郵箱框架相關(guān):


- Virtio vring 示意圖:

- 雙核通信流程圖:

- 加載 rpmsg 驅(qū)動過程圖:
