架構(gòu)說明
本項目以 STM32MP157A-DK1 為硬件平臺。作為能夠支持輕松開發(fā)更廣泛應(yīng)用的通用微處理器產(chǎn)品線,STM32MP157 系列基于雙核Cortex-A7 與 Cortex-M4 組成的異構(gòu)架構(gòu),加強了支持多應(yīng)用和靈活應(yīng)用的能力,可以隨時實現(xiàn)最佳性能和功率數(shù)據(jù)。Cortex-A7 內(nèi)核提供對開源操作系統(tǒng)(Linux/Android)的支持,而 Cortex-M4 內(nèi)核可以利用 STM32 MCU 的生態(tài)系統(tǒng)。本篇文章將介紹如何在 STM32MP157 上運行 RT-Thread OS。
啟動方式
Forced USB boot For flashing : 通過 USB 燒寫固件。在此模式下,可以使用 STM32Cube Programmer 工具燒寫 A7 核固件。
Engineer Mode: 一般用于 M4 核的調(diào)試。由于 STM32MP1 沒有 Flash,所以代碼會被燒寫到 Cortex-M4 核有訪問權(quán)限的 RAM 里面,因此掉電程序會丟失。
SD card on SDMMC1 : 從 SD card 啟動。
工作模式
STM32MP1 有兩種工作模式
工程模式(Engineer Mode),系統(tǒng)上電后,不會啟動 A7 核。M4 核此時可以像平常 STM32 的開發(fā)流程,借助于調(diào)試工具進行調(diào)試。
產(chǎn)品模式(Production Mode),系統(tǒng)上電后,會先啟動 A7 核,然后由 A7 核來啟動 M4 核。
OpenAMP
開源的非對稱多處理框架(OpenAMP)為開發(fā) AMP 系統(tǒng)提供了必要的 API 函數(shù)。OpenAMP 是 Xilinx 和M entor Graphic 于2014年發(fā)起的一個開源項目,旨在提供一份協(xié)處理器的標準通信框架。OpenAMP 提供用于開發(fā) AMP 系統(tǒng)軟件應(yīng)用程序所需的軟件組件,它允許操作系統(tǒng)在各種復(fù)雜的同構(gòu)和異構(gòu)結(jié)構(gòu)中交互,并允許不對稱的多處理應(yīng)用程序利用多核配置提供并行性。在 STM32MP1 系列中,A7 和 M4 兩個核心的通信是通過底層的 IPCC 控制器進行,軟件層使用 RPMsg 框架與用戶進行交互。
IPCC
處理器間通信控制器 (IPCC) 用于兩個處理器之間的數(shù)據(jù)交換。它提供了一種非阻塞的信號機制,以原子方式發(fā)布和檢索信息。IPCC 外設(shè)提供了硬件支持來管理兩個處理器之間的通信,每個處理器都擁有特定的寄存器庫和中斷。IPCC 為內(nèi)核間的通信提供了硬件基礎(chǔ)。
STM32MP1 使用 IPCC 外設(shè)進行處理器間通信,配置如下:
IPCC 處理器 1 接口被分配到 ARM Cortex-A7 不安全上下文,由 Linux 郵箱框架進行處理
IPCC 處理器 2 接口被分配到 ARM Cortex-M4 上下文,由 IPCC HAL 驅(qū)動程序進行處理
REMOTEPROC
遠程處理器框架(remoteproc)的主要作用作用是對遠程從處理器進行生命周期的管理,啟動和停止遠程處理器。在 STM32MP157 中,當系統(tǒng)啟動時,A7 核會被先啟動,然后借助于 Linux RemoteProc 框架加載 M4 固件,啟動 M4 內(nèi)核代碼。
RPMsg
Remoteproc 框架實現(xiàn)了對遠程處理器生命周期的管理,RPMsg 框架則實現(xiàn)了對遠程處理器的信息傳遞。
Linux RPMsg (Remote Processor Messaging)框架是在 virtio 框架上實現(xiàn)的信息傳遞機制,以便與遠程處理器進行通信,它基于 virtio vrings 通過共享內(nèi)存發(fā)送、接收來自遠程處理器的消息。
vrings 是單向的,一個 vring 專門用于發(fā)送消息到遠程處理器,另外一個 vring 用于接收來自遠程服務(wù)器的消息。消息服務(wù)基于共享內(nèi)存,共享內(nèi)存(shared memory)是在兩個處理器都具有訪問權(quán)限的內(nèi)存空間中創(chuàng)建的;信號通知(mailbox)服務(wù)基于內(nèi)部 IPCC。
編譯&運行
生成 ELF 文件
在 rt-thread/bsp/stm32/stm32mp157a-st-discovery 目錄下打開 env 工具;
輸入 menuconfig,打開 OpenAMP:
配置串口。由于官方默認的程序中 A7 核(OpenSTLinux)需要使用串口 4 ,所以這里修改 M4 核(RT-Thread)的調(diào)試串口為 UART3:
保存配置,輸入命令 scons --target=iar 生成 IAR 工程。
打開 IAR 工程。編譯,生成 ELF 文件:
KEIL 的操作和上面 IAR 的操作是一樣的,只不過 KEIL 生成的是 axf 文件,一樣可以正常使用。
加載 ELF 文件
設(shè)置 Boot mode 為 SD card on SDMMC1 模式,復(fù)位開發(fā)板:
等待系統(tǒng)初始化完成,輸入命令ifconfig獲取開發(fā)板 IP 地址;
使用 ssh 工具連接開發(fā)板:
上傳 ELF 文件:
連接串口3,作為 M4 核(RT-Thread OS)調(diào)試串口:
使用 Linux Remoteproc 框架加載 Cortex-M4 固件,啟動 Cortex-M4 內(nèi)核:
mv /tmp/RT-Thread-STM32MP1_CM4.elf /lib/firmware/echo RT-Thread-STM32MP1_CM4.elf > /sys/class/remoteproc/remoteproc0/firmwareecho start > /sys/class/remoteproc/remoteproc0/state
啟動 OpenAMP
在 RT-Thread 終端輸入命令 console set openamp 切換 RT-Thread console 設(shè)備為 openamp:
在 Linux 終端輸入以下命令:
stty-onlcr-echo-F/dev/ttyRPMSG0cat/dev/ttyRPMSG0&
在 Linux 終輸入命令進行驗證:
完整操作流程
結(jié)語
STM32MP1 作為 ST 推出的第一顆支持 Linux 系統(tǒng)的 MPU,依托于 STM32 成熟的生態(tài)系統(tǒng)(STM32CubeMX、STM32Cube Programmer),用戶可以快速的進行開發(fā),驗證。非對稱多處理器架構(gòu)雖然目前在嵌入式領(lǐng)域還不是主流,但未來肯定是趨勢。通過 Linux 與 RT-Thread 操作系統(tǒng)的結(jié)合,可以很輕松的開發(fā)多場景應(yīng)用,如工業(yè)、家居、消費品、物聯(lián)網(wǎng)、衛(wèi)生和健康等領(lǐng)域。期待未來 RT-Smart 和 RT-Thread 能同時運行在非對稱多處理器上。
本文作者為RT-Thread論壇用戶「Papalymo」在此特別鳴謝
-
處理器
+關(guān)注
關(guān)注
68文章
19103瀏覽量
228826 -
嵌入式
+關(guān)注
關(guān)注
5059文章
18975瀏覽量
302088 -
Linux
+關(guān)注
關(guān)注
87文章
11212瀏覽量
208723 -
STM32
+關(guān)注
關(guān)注
2264文章
10854瀏覽量
354311 -
RT-Thread
+關(guān)注
關(guān)注
31文章
1261瀏覽量
39841
發(fā)布評論請先 登錄
相關(guān)推薦
評論