架構(gòu)說明
本項目以 STM32MP157A-DK1 為硬件平臺。作為能夠支持輕松開發(fā)更廣泛應用的通用微處理器產(chǎn)品線,STM32MP157 系列基于雙核Cortex-A7 與 Cortex-M4 組成的異構(gòu)架構(gòu),加強了支持多應用和靈活應用的能力,可以隨時實現(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 核有訪問權限的 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)軟件應用程序所需的軟件組件,它允許操作系統(tǒng)在各種復雜的同構(gòu)和異構(gòu)結(jié)構(gòu)中交互,并允許不對稱的多處理應用程序利用多核配置提供并行性。在 STM32MP1 系列中,A7 和 M4 兩個核心的通信是通過底層的 IPCC 控制器進行,軟件層使用 RPMsg 框架與用戶進行交互。
IPCC
處理器間通信控制器 (IPCC) 用于兩個處理器之間的數(shù)據(jù)交換。它提供了一種非阻塞的信號機制,以原子方式發(fā)布和檢索信息。IPCC 外設提供了硬件支持來管理兩個處理器之間的通信,每個處理器都擁有特定的寄存器庫和中斷。IPCC 為內(nèi)核間的通信提供了硬件基礎。
STM32MP1 使用 IPCC 外設進行處理器間通信,配置如下:
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 用于接收來自遠程服務器的消息。消息服務基于共享內(nèi)存,共享內(nèi)存(shared memory)是在兩個處理器都具有訪問權限的內(nèi)存空間中創(chuàng)建的;信號通知(mailbox)服務基于內(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 文件
設置 Boot mode 為 SD card on SDMMC1 模式,復位開發(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 設備為 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)雖然目前在嵌入式領域還不是主流,但未來肯定是趨勢。通過 Linux 與 RT-Thread 操作系統(tǒng)的結(jié)合,可以很輕松的開發(fā)多場景應用,如工業(yè)、家居、消費品、物聯(lián)網(wǎng)、衛(wèi)生和健康等領域。期待未來 RT-Smart 和 RT-Thread 能同時運行在非對稱多處理器上。
本文作者為RT-Thread論壇用戶「Papalymo」在此特別鳴謝
-
處理器
+關注
關注
68文章
19404瀏覽量
230914 -
嵌入式
+關注
關注
5091文章
19176瀏覽量
307100 -
Linux
+關注
關注
87文章
11342瀏覽量
210222 -
STM32
+關注
關注
2271文章
10923瀏覽量
357215 -
RT-Thread
+關注
關注
31文章
1305瀏覽量
40331
發(fā)布評論請先 登錄
相關推薦
評論