0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

STM32MP1處理器下實現(xiàn)RT-Thread和Linux同時運行

Rice嵌入式開發(fā)技術(shù)分享 ? 來源:Papalymo ? 作者:Papalymo ? 2022-10-31 12:27 ? 次閱讀

架構(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。

2d43c572-580b-11ed-b468-dac502259ad0.png

啟動方式

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ū)動程序進行處理

2d62a14a-580b-11ed-b468-dac502259ad0.png

REMOTEPROC

遠程處理器框架(remoteproc)的主要作用作用是對遠程從處理器進行生命周期的管理,啟動和停止遠程處理器。在 STM32MP157 中,當系統(tǒng)啟動時,A7 核會被先啟動,然后借助于 Linux RemoteProc 框架加載 M4 固件,啟動 M4 內(nèi)核代碼。

2d7f3620-580b-11ed-b468-dac502259ad0.png

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。

2db7803e-580b-11ed-b468-dac502259ad0.png

編譯&運行

生成 ELF 文件

在 rt-thread/bsp/stm32/stm32mp157a-st-discovery 目錄下打開 env 工具;

輸入 menuconfig,打開 OpenAMP:

2e6ba636-580b-11ed-b468-dac502259ad0.png

配置串口。由于官方默認的程序中 A7 核(OpenSTLinux)需要使用串口 4 ,所以這里修改 M4 核(RT-Thread)的調(diào)試串口為 UART3:

2e82d266-580b-11ed-b468-dac502259ad0.png

2ea2157c-580b-11ed-b468-dac502259ad0.png

保存配置,輸入命令 scons --target=iar 生成 IAR 工程。

2eaa228a-580b-11ed-b468-dac502259ad0.png

打開 IAR 工程。編譯,生成 ELF 文件:

2eb9ff84-580b-11ed-b468-dac502259ad0.png

KEIL 的操作和上面 IAR 的操作是一樣的,只不過 KEIL 生成的是 axf 文件,一樣可以正常使用。

加載 ELF 文件

設(shè)置 Boot mode 為 SD card on SDMMC1 模式,復(fù)位開發(fā)板:

等待系統(tǒng)初始化完成,輸入命令ifconfig獲取開發(fā)板 IP 地址;

使用 ssh 工具連接開發(fā)板:

2ed85ae2-580b-11ed-b468-dac502259ad0.png

上傳 ELF 文件:

2ee6f192-580b-11ed-b468-dac502259ad0.png

連接串口3,作為 M4 核(RT-Thread OS)調(diào)試串口:

2efa9120-580b-11ed-b468-dac502259ad0.png

使用 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

2f2e4f24-580b-11ed-b468-dac502259ad0.png

2f57c58e-580b-11ed-b468-dac502259ad0.png

啟動 OpenAMP

在 RT-Thread 終端輸入命令 console set openamp 切換 RT-Thread console 設(shè)備為 openamp:

2f7527f0-580b-11ed-b468-dac502259ad0.png

在 Linux 終端輸入以下命令:

stty-onlcr-echo-F/dev/ttyRPMSG0cat/dev/ttyRPMSG0&

在 Linux 終輸入命令進行驗證:

2f7f3ed4-580b-11ed-b468-dac502259ad0.png

完整操作流程

2f9601c8-580b-11ed-b468-dac502259ad0.png

結(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」在此特別鳴謝

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 處理器
    +關(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
收藏 人收藏

    評論

    相關(guān)推薦

    基于STM32MP1處理器的PHYTEC開發(fā)板介紹

    PHYTEC開發(fā)板是PHYTEC基于 STM32MP1 處理器開發(fā)的,STM32MP1 系列處理器集成了雙核 Arm? Cortex?-A7、單核 Cortex?-M4 及GPU。它提
    發(fā)表于 03-30 11:02 ?4605次閱讀
    基于<b class='flag-5'>STM32MP1</b><b class='flag-5'>處理器</b>的PHYTEC開發(fā)板介紹

    混合部署 | 在迅為RK3568上同時部署RT-ThreadLinux系統(tǒng)

    RT-Thread系統(tǒng)已經(jīng)同時運行了,其中CPU0、CPU1、CPU2運行Linux系統(tǒng),CPU3運行
    發(fā)表于 09-18 10:54

    混合部署 | 在迅為RK3568上同時部署RT-ThreadLinux系統(tǒng)

    系統(tǒng)和RT-Thread系統(tǒng)已經(jīng)同時運行了,其中CPU0、CPU1、CPU2運行Linux系統(tǒng),CPU3
    發(fā)表于 11-01 10:31

    STM32MP157上運行RT-Thread OS的步驟教程

    ,驗證。非對稱多處理器架構(gòu)雖然目前在嵌入式領(lǐng)域還不是主流,但未來肯定是趨勢。通過 LinuxRT-Thread 操作系統(tǒng)的結(jié)合,可以很輕松的開發(fā)多場景應(yīng)用,如工業(yè)、家居、消費品、物聯(lián)網(wǎng)、衛(wèi)生和健康等領(lǐng)域。期待未來
    發(fā)表于 03-16 10:14

    在NUC980處理器運行RT-Thread系統(tǒng)

    (1) NUC980nuc980是新塘推出的基于 ARM926EJ-S,集成 64 MB 或 128 MB DDR-II 的處理器,主頻可以達到300MHZ,有 64-pin、128-pin
    發(fā)表于 10-13 15:29

    如何在STM32MP157上運行RT-Thread OS?

    操作系統(tǒng)的結(jié)合,可以很輕松的開發(fā)多場景應(yīng)用,如工業(yè)、家居、消費品、物聯(lián)網(wǎng)、衛(wèi)生和健康等領(lǐng)域。期待未來 RT-Smart 和 RT-Thread同時運行在非對稱多處理器上。原作者:
    發(fā)表于 02-14 11:41

    米爾科技STM32MP1系列處理器介紹

    意法半導(dǎo)體新推出的STM32MP1多核微處理器系列具有計算和圖形處理能力,兼?zhèn)涓吣苄崟r控制和高功能集成度。
    的頭像 發(fā)表于 11-26 15:34 ?2941次閱讀
    米爾科技<b class='flag-5'>STM32MP1</b>系列<b class='flag-5'>處理器</b>介紹

    STM32遇到Linux = STM32MP1

    STM32遇到Linux = STM32MP1
    的頭像 發(fā)表于 03-01 13:37 ?2100次閱讀

    STM32MP157系列教程連載-硬件設(shè)計篇2:STM32MP1處理器之電源篇

    手冊、參考手冊、設(shè)計參考文檔)與參考電路板(DK板與EV板),用于產(chǎn)品設(shè)計參考:官網(wǎng)首頁進入官方后,選擇產(chǎn)品->微控制->STM32 Arm Cortex MPUs(點擊) 進入STM32MP1系列
    發(fā)表于 11-06 16:51 ?13次下載
    <b class='flag-5'>STM32MP</b>157系列教程連載-硬件設(shè)計篇2:<b class='flag-5'>STM32MP1</b>微<b class='flag-5'>處理器</b>之電源篇

    STM32MP157系列教程連載-Linux系統(tǒng)移植篇8:STM32MP1處理器Linux內(nèi)核配置及編譯

    STM32MP157系列教程連載-Linux系統(tǒng)移植篇8:STM32MP1處理器Linux內(nèi)核配置及編譯第
    發(fā)表于 12-22 18:52 ?0次下載
    <b class='flag-5'>STM32MP</b>157系列教程連載-<b class='flag-5'>Linux</b>系統(tǒng)移植篇8:<b class='flag-5'>STM32MP1</b>微<b class='flag-5'>處理器</b>之<b class='flag-5'>Linux</b>內(nèi)核配置及編譯

    基于RT-Thread和RA6M4實現(xiàn)samba服務(wù)移動網(wǎng)盤

    本文詳細介紹了基于RT-Thread操作系統(tǒng)和RA6M4處理器,如何移植和適配samba服務(wù)。同時,還提供Linux環(huán)境和QEMU仿真環(huán)境的參考移植,希望對大家有所啟發(fā)和幫助。
    的頭像 發(fā)表于 08-17 12:53 ?1431次閱讀
    基于<b class='flag-5'>RT-Thread</b>和RA6M4<b class='flag-5'>實現(xiàn)</b>samba服務(wù)移動網(wǎng)盤

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 <b class='flag-5'>STM32</b>L475 上手指南

    4月10日深圳場RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    4月10日我們將在深圳福田舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Threadlinux
    的頭像 發(fā)表于 03-27 11:36 ?744次閱讀
    4月10日深圳場<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!

    4月25日北京站RT-Thread線下workshop,探索RT-Thread混合部署新模式

    4月25日,下午我們將在北京舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Threadlinux
    的頭像 發(fā)表于 04-16 08:35 ?382次閱讀
    4月25日北京站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式

    6月6日杭州站RT-Thread線下workshop,探索RT-Thread混合部署新模式!

    6月6日下午我們將在杭州舉辦RT-Thread混合部署線下workshop,在瑞芯微RK3568平臺上實現(xiàn)同時運行RT-Threadlinux
    的頭像 發(fā)表于 05-28 08:35 ?388次閱讀
    6月6日杭州站<b class='flag-5'>RT-Thread</b>線下workshop,探索<b class='flag-5'>RT-Thread</b>混合部署新模式!