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

- SMP 結構示意圖:

- AMP 結構示意圖:

- IPCC 通信框架:

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

- 郵箱框架相關:


- Virtio vring 示意圖:

- 雙核通信流程圖:

- 加載 rpmsg 驅動過程圖:
