STM32MP1xx的啟動流程

https://wiki.st.com/stm32mpu/wiki/Boot_chain_overview

根據提供的知識庫內容,以下是STM32 MPU啟動鏈的詳細解析:

1. 通用啟動流程
STM32 MPU啟動分為多階段,逐步初始化外設和內存,并建立信任鏈:

1.1 ROM代碼(BootROM)
作用:首個執行的代碼,選擇啟動設備(串口/閃存),加載FSBL到內部RAM。
安全:驗證FSBL的完整性,建立信任鏈的起點。
存儲:固化在芯片ROM中,體積小(幾十KB)。
1.2 第一級引導程序(FSBL)
功能:初始化時鐘樹、DDR控制器,加載SSBL到外部RAM。
實現:STM32MP13/15使用TF-A BL2(Trusted Firmware-A)作為FSBL。
安全:可選認證,支持解密和驗證后續組件。
1.3 第二級引導程序(SSBL)
功能:復雜外設驅動(USB/以太網/顯示),加載內核到內存。
常用工具:U-Boot(支持靈活啟動方式,如網絡/USB)。
安全:可選認證下一階段組件(如內核)。
1.4 內核空間
功能:初始化外設驅動,啟動用戶空間。
安全:內核運行在非安全上下文(Nonsecure)。
1.5 用戶空間
啟動:內核啟動init進程,執行根文件系統(rootfs)中的初始化腳本。
應用:最終暴露用戶界面(如GUI)。
2. 安全與協處理器管理
2.1 安全監控器(Secure Monitor)
作用:管理安全與非安全上下文切換,支持用戶認證、密鑰存儲。
實現:基于Arm TrustZone技術,運行在Cortex-A安全模式(EL3)。
2.2 協處理器(Cortex-M)
啟動時機:
早期啟動:由SSBL(如U-Boot的rproc命令)加載。
運行時啟動:由Linux remoteproc框架管理。
安全認證:
STM32MP2系列:通過OP-TEE可信應用(TA)驗證協處理器固件,確保完整性。
STM32MP15:可選通過TF-A或U-Boot認證。
3. 各系列差異
3.1 STM32MP13/15系列
FSBL:TF-A BL2。
SSBL:U-Boot。
協處理器:Cortex-M4(MP15)支持實時/低功耗任務。
安全啟動:可選認證,支持信任鏈擴展。
3.2 STM32MP2系列
主核:Cortex-A35,啟動時協處理器(Cortex-M33)保持復位。
安全架構:
OP-TEE:管理安全服務,隔離內存區域。
協處理器固件:可包含安全(TF-M)和非安全(STM32Cube)部分。
認證流程:通過OP-TEE TA驗證Cortex-M33固件,確保運行時完整性。
4. 工具與配置
STM32CubeMX:配置啟動組件(如時鐘樹、外設初始化)。
TF-A/U-Boot:開源引導程序,支持定制啟動流程。
OP-TEE:提供安全執行環境(TEE),支持可信應用開發。
5. 典型問題解答
Q1: 如何選擇啟動設備?
A1: BootROM根據引腳狀態(如BOOT0/1)或OTP配置選擇啟動源(eMMC、SD卡、UART等)。

Q2: 安全啟動如何實現?
A2: BootROM驗證FSBL簽名,FSBL驗證SSBL,逐級建立信任鏈。STM32MP2還可通過OP-TEE TA認證協處理器固件。

Q3: 協處理器何時啟動?
A3: 可在SSBL階段(快速啟動)或Linux運行時(動態加載),通過remoteproc管理。

Q4: 如何優化啟動時間?
A4: 減少SSBL功能(如禁用網絡/USB)、提前啟動協處理器、使用壓縮內核鏡像。

如需進一步探討具體配置或安全實現細節,可提供更具體的問題方向。

https://wiki.st.com/stm32mpu/wiki/TF-A_overview

根據您提供的知識庫內容,以下是關鍵信息整理及常見問題解答方向:

一、TF-A 引導流程要點
STM32MPU專用調整:
移除了BL1階段(因STM32自帶ROM Bootloader)
直接從BL2啟動,負責加載安全/非安全鏡像
AArch32架構下:BL2 → BL32(OP-TEE)→ BL33(U-Boot)
AArch64架構下:BL2 → BL31(EL3運行時)→ BL32/BL33
安全服務:
Armv7使用OP-TEE作為BL32,替代舊版SP_MIN
提供安全監控調用(SMC)和PSCI電源管理接口
設備樹配置:
BL2/BL31階段使用精簡設備樹
可通過STM32CubeMX工具配置
二、開發任務指南方向
1. 存儲設備擴展
Yocto添加NAND閃存:
# 示例:修改Yocto層配置文件
MACHINE_FEATURES += "nand"
IMAGE_INSTALL_append = " mtd-utils"
需調整內核設備樹,添加NAND控制器及分區表。
2. 顯示驅動開發
低分辨率慢速接口驅動:
使用Linux DRM框架
實現struct drm_panel_funcs中的enable/disable時序控制
注意配置pixel-clock和display-timings節點
3. 性能優化
TensorFlow Lite硬件加速:
// 啟用STM32 NPU Delegation
std::unique_ptr<tflite::TfLiteDelegate, decltype(&free)>?
? delegate(TfLiteNpuDelegateCreate(&options), free);
interpreter->ModifyGraphWithDelegate(delegate.get());
需在編譯時啟用--define tflite_with_stm32_npu=true
4. 系統配置
256MB DDR映射配置:
// 修改TF-A設備樹內存節點
memory@c0000000 {
? ? device_type = "memory";
? ? reg = <0xc0000000 0x10000000>; // 起始地址0xC000_0000,大小256MB
};
三、調試技巧
STM32CubeIDE調試Cortex-M33:
創建STM32MP25xx_CM33目標配置
在Debug Configurations中啟用Secure Debug模式
使用Semihosting輸出調試日志
四、數據一致性管理
Cache與MMU協同:
// 使用MPU API維護緩存一致性
SCB_EnableICache();
SCB_EnableDCache();
HAL_MMU_ConfigRegion(DEVICE_nGnRnE); // 配置外設內存屬性
如需具體某個問題的分步指南,請告知具體應用場景(如正在調試哪類外設或遇到何種報錯),我將結合知識庫給出詳細方案。

基于兩個STM32MPU知識庫鏈接(Boot Chain Overview 和 TF-A Overview),以下是關鍵知識整合及常見問題解答方向:

1. STM32MPU啟動流程核心階段
階段?? ?組件?? ?功能?? ?安全角色
BootROM?? ?ROM代碼?? ?初始化基礎硬件,選擇啟動設備(eMMC/SD/UART),加載FSBL到SRAM。?? ?驗證FSBL簽名,信任鏈起點。
FSBL?? ?TF-A BL2?? ?初始化DDR、時鐘樹,加載SSBL(U-Boot)到DDR。?? ?可選驗證SSBL,支持加密鏡像。
SSBL?? ?U-Boot?? ?初始化復雜外設(USB/以太網),加載內核和設備樹。?? ?可選驗證內核/設備樹,傳遞安全狀態。
OS Kernel?? ?Linux/RTOS?? ?啟動用戶空間,管理硬件資源。?? ?非安全上下文運行。
協處理器?? ?Cortex-M4/M33?? ?實時任務處理(如電機控制),通過remoteproc或U-Boot bootaux啟動。?? ?STM32MP2需通過OP-TEE驗證固件。
2. TF-A在STM32MPU中的關鍵作用
(1) 架構差異
STM32MP15(AArch32):
BL2 → BL32(OP-TEE) → BL33(U-Boot)
OP-TEE提供安全服務(如密鑰存儲)。
STM32MP2(AArch64):
BL2 → BL31(EL3運行時) → BL32/BL33
BL31管理安全監控(Secure Monitor)。
(2) 安全啟動流程
BootROM 驗證FSBL(BL2)的RSA簽名。
BL2 驗證BL32/BL33的哈希或簽名。
BL32(OP-TEE) 驗證協處理器固件(如STM32MP2的Cortex-M33固件)。
(3) 關鍵配置
# 啟用加密鏡像支持
STM32MP_USE_ENCRYPTED_BOOT = 1
# 選擇BL32實現(OP-TEE或SP_MIN)
BL32 = optee
3. 常見問題解答
(1) 如何配置STM32MP15從UART啟動?
硬件配置:設置BOOT引腳(BOOT0=1, BOOT1=0)。
TF-A修改:
// 修改plat/st/stm32mp1/stm32mp1_def.h
#define STM32MP_BOOT_DEVICE_UART 1
**使用STM32CubeProgrammer通過UART加載FSBL。
(2) 如何在U-Boot中啟動協處理器?
加載固件到內存:
=> load mmc 0:1 0x48000000 m4_fw.elf
啟動協處理器:
=> bootaux 0x48000000
驗證狀態:
=> rproc list
(3) 如何啟用安全啟動?
生成密鑰:
openssl genrsa -out private.pem 2048
簽名鏡像:
tools/cert_create/cert_create -n --key private.pek --tb-fw BL2.bin
燒寫密鑰哈希到OTP:
stm32key -k public_key.bin -a write
4. 調試技巧
(1) TF-A日志調試
啟用串口輸出:
# 修改TF-A編譯選項
DEBUG = 1
LOG_LEVEL = 40 ?# 最高詳細級別
查看BL2日志:UART輸出BL2初始化過程。
(2) 協處理器故障排查
檢查內存映射:確保協處理器固件加載地址不沖突(如SRAM區域)。
驗證固件格式:使用readelf -h m4_fw.elf檢查ELF頭是否有效。
5. 性能優化
(1) 縮短啟動時間
禁用非必要功能:
# U-Boot配置中禁用網絡/USB
# CONFIG_CMD_NET=n
# CONFIG_USB=n
啟用壓縮內核:
make zImage ?# 生成壓縮內核鏡像
總結
以上內容整合了STM32MPU啟動鏈和TF-A的核心知識點,涵蓋安全配置、協處理器管理及調試技巧。如需針對具體開發場景(如自定義BL2、優化啟動流程)的逐步指南,請提供更詳細的需求。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/72467.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/72467.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/72467.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Collab-Overcooked:專注于多智能體協作的語言模型基準測試平臺

2025-02-27&#xff0c;由北京郵電大學和理想汽車公司聯合創建。該平臺基于《Overcooked-AI》游戲環境&#xff0c;設計了更具挑戰性和實用性的交互任務&#xff0c;目的通過自然語言溝通促進多智能體協作。 一、研究背景 近年來&#xff0c;基于大型語言模型的智能體系統在復…

QT——文件IO

QFile 類 構造函數 QFile() 無參構造 僅僅構建一個QFile 對象&#xff0c;不設定文件名 QFile(文件名) 構建一個QFile對象的同時&#xff0c;設定文件名 但是注意&#xff0c;僅僅設定文件名&#xff0c;并不會打開該文件 設定文件名 QFile file file.setFileName…

HTML第三節

一.初識CSS 1.CSS定義 A.內部樣式表 B.外部樣式表 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title&g…

xr-frame 3D Marker識別,揚州古牌坊 3D識別技術穩定調研

目錄 識別物體規范 3D Marker 識別目標文件 map 生成 生成任務狀態解析 服務耗時&#xff1a; 對傳入的視頻有如下要求&#xff1a; 對傳入的視頻建議&#xff1a; 識別物體規范 為提高Marker質量&#xff0c;保證算法識別效果&#xff0c;可參考Marker規范文檔 Marker規…

html+js 輪播圖

<!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>輪播圖示例</title><style>/* 基本樣式…

NAT 代理服務 內網穿透

&#x1f308; 個人主頁&#xff1a;Zfox_ &#x1f525; 系列專欄&#xff1a;Linux 目錄 一&#xff1a;&#x1f525; NAT 技術背景二&#xff1a;&#x1f525; NAT IP 轉換過程三&#xff1a;&#x1f525; NAPT四&#xff1a;&#x1f525; 代理服務器&#x1f98b; 正向…

[Web 安全] PHP 反序列化漏洞 —— PHP 魔術方法

關注這個專欄的其他相關筆記&#xff1a;[Web 安全] 反序列化漏洞 - 學習筆記-CSDN博客 PHP 魔術方法 - 簡介 - PHP 魔術方法 - 簡單教程&#xff0c;簡單編程PHP 中&#xff0c;以兩個下劃線 ( __ ) 開頭方法稱之為 「 魔術方法 」 這些 「 魔術方法 」 在 [PHP](/l/yufei/php…

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式

20250304在Ubuntu20.04的GUI下格式化exFAT格式的TF卡為ext4格式 2025/3/4 16:47 緣起&#xff1a;128GB的TF卡&#xff0c;只能格式化為NTFS/exFAT/ext4。 在飛凌的OK3588-C下&#xff0c;NTFS格式只讀。 exFAT需要改內核來支持。 現在只剩下ext4了。 linux R4默認不支持exFAT…

跨域問題解釋及前后端解決方案(SpringBoot)

一、問題引出 有時,控制臺出現如下問題。 二、為什么會有跨域 2.1瀏覽器同源策略 瀏覽器的同源策略 &#xff08; Same-origin policy &#xff09;是一種重要的安全機制&#xff0c;用于限制一個源&#xff08; origin &#xff09;的文檔或 腳本如何與另一個源的資源進行…

【NLP 30、文本匹配任務 —— 傳統機器學習算法】

目錄 一、文本匹配任務的定義 1.狹義解釋 2.廣義解釋 二、文本匹配的應用 1.問答對話 2.信息檢索 3.文本匹配任務應用 三、智能問答 1.智能問答的基本思路 依照基礎資源劃分&#xff1a; 依照答案產出方式劃分 依照NLP相關技術劃分 四、智能問答的價值 1.智能客服 2.Faq知識庫問…

開源表單、投票、測評平臺部署教程

填鴨表單聯合寶塔面板深度定制,自寶塔面板 9.2 版本開始,在寶塔面板-軟件商店中可以一鍵部署填鴨表單系統。 簡單操作即可擁有屬于自己的表單問卷系統,快速賦能業務。即使小白用戶也能輕松上手。 社區版體驗地址:https://demo.tduckapp.com/home 前端項目地址: tduck-fro…

Elasticsearch 限制索引大小與索引模板匹配沖突解決方案

文章目錄 背景介紹環境限制索引大小創建 ILM&#xff08;索引生命周期管理&#xff09;策略創建 ILM 策略 創建索引模板并關聯 ILM 策略使用索引模板應用 ILM 策略 解決索引模板匹配沖突? 解決方案&#x1f539; 方案 1&#xff1a;修改 index_patterns&#xff08;推薦&#…

[LeetCode]day33 150.逆波蘭式求表達值 + 239.滑動窗口最大值

逆波蘭式求表達值 題目鏈接 題目描述 給你一個字符串數組 tokens &#xff0c;表示一個根據 逆波蘭表示法 表示的算術表達式。 請你計算該表達式。返回一個表示表達式值的整數。 注意&#xff1a; 有效的算符為 ‘’、‘-’、‘*’ 和 ‘/’ 。 每個操作數&#xff08;運…

論文閱讀筆記:UniFace: Unified Cross-Entropy Loss for Deep Face Recognition

論文閱讀筆記&#xff1a;UniFace: Unified Cross-Entropy Loss for Deep Face Recognition 1 背景2 創新點3 方法3.1 回顧softmax損失3.2 統一交叉熵損失3.3 人臉驗證中的UCE損失3.4 進一步的優化3.4.1 邊際UCE損失3.4.2 平衡BCE損失 4 實驗4.1 消融實驗4.2 和SOTA方法對比 論…

Metal學習筆記七:片元函數

知道如何通過將頂點數據發送到 vertex 函數來渲染三角形、線條和點是一項非常巧妙的技能 — 尤其是因為您能夠使用簡單的單行片段函數為形狀著色。但是&#xff0c;片段著色器能夠執行更多操作。 ? 打開網站 https://shadertoy.com&#xff0c;在那里您會發現大量令人眼花繚亂…

騰訊云 | 微搭低代碼快速開發數據表單應用

如上所示&#xff0c;登錄騰訊云微搭低代碼業務控制臺&#xff0c;開始新創建一個應用&#xff0c;創建應用的方式包括&#xff0c;根據實際的業務需求&#xff0c;從模版列表中選擇一個模板填入數據模型創建新應用&#xff0c;使用微搭組件自主設計數據模型創建新應用&#xf…

儲油自動化革命,網關PROFINET與MODBUS網橋的無縫融合,錦上添花

儲油行業作為能源供應鏈的關鍵環節&#xff0c;其自動化和監控系統的可靠性和效率至關重要。隨著工業4.0的推進&#xff0c;儲油設施越來越多地采用先進的自動化技術以提高安全性、降低成本并優化運營。本案例探討了如何通過使用穩聯技術PROFINET轉MODBUS模塊網關網橋&#xff…

【前端】JavaScript 備忘清單(超級詳細!)

文章目錄 入門介紹打印調試斷點調試數字let 關鍵字const 關鍵字變量字符串算術運算符注釋賦值運算符字符串插值字符串數字Math全局函數 JavaScript 條件操作符邏輯運算符 &&比較運算符邏輯運算符空值合并運算符 ?? if Statement (if 語句)Ternary Operator (三元運算…

Linux cat 命令

cat&#xff08;英文全拼&#xff1a;concatenate&#xff09;命令用于連接文件并打印到標準輸出設備上&#xff0c;它的主要作用是用于查看和連接文件。 使用權限 所有使用者 語法格式 cat [選項] [文件] 參數說明&#xff1a; -n&#xff1a;顯示行號&#xff0c;會在輸…

PARETO PROMPT OPTIMIZATION

題目 帕累托提示優化 論文地址&#xff1a;https://openreview.net/forum?idHGCk5aaSvE 摘要 自然語言迅速優化或及時工程已成為一種強大的技術&#xff0c;可以解鎖大型語言模型&#xff08;LLMS&#xff09;的各種任務的潛力。盡管現有方法主要集中于最大化LLM輸出的單一特…