基于正点原子 STM32MP257DAK3 开发板,使用 STM32CubeMX + OpenSTLinux 开发过程中遇到的问题与解决方案汇总。
STM32MP2 Develop Package Problems
基于正点原子 STM32MP257DAK3 开发板,使用 STM32CubeMX + OpenSTLinux 开发过程中遇到的问题与解决方案汇总。
1. CubeMX 警告:SDMMC 与 RCC 配置
Faulty state detected for SDMMC1, SDMMC2 : Only one Memory Boot Device can be assigned to TF-A simultaneously.
状态: 正常现象,可忽略。
Main Config: These peripherals still have some not configured or wrong parameter values: [RCC]
状态: ST 官方已确认问题,正在解决。


2. TF-A 阶段:USB 控制台报错
ERROR: usb_core_ctl_error : Send an ERROR
解决方案: 在 fw-config.dts 中添加 dtb-registry 节点:
dts
dtb-registry {
soc_fw-config {
load-address = <0x0 0x81fc0000>;
max-size = <0x40000>;
};
tos_fw {
load-address = <0x0 0x82000000>;
max-size = <0x2000000>;
};
};
3. TF-A 阶段:DDR 初始化失败(BACKTRACE stm32mp2_ddr_init)
BACKTRACE: START: stm32mp2_ddr_init
...
PANIC at PC : 0x000000000e01e3d0
解决方案: 在设备树中补全 DDR 电源配置:
dts
&ddr {
status = "okay";
vdd-supply = <&vdd_ddr>;
vtt-supply = <&vtt_ddr>;
vpp-supply = <&vpp_ddr>;
vref-supply = <&vref_ddr>;
};
4. TF-A 阶段:DDR PHY 训练失败
ERROR: ddrphy_phyinit_usercustom_g_waitfwdone Training has failed.
ERROR: DDR PHY init: Error -1
解决方案: 根据正点原子开发板原理图,重新进行 DDR 引脚 remapping。

5. BL31 阶段:RISAF4 配置错误(EL3 PANIC)
NOTICE: BL2: Booting BL31
...
PANIC in EL3.
解决方案: 在 CubeMX 中配置 RIF → External Memorys (RISAF) → RISAF4 (DDR)。
6. BL31 阶段:RISAF4 DDR 加密特性错误
ERROR: RISAF4: encryption feature error
PANIC at PC : 0x000000000e02324c
根因分析:
- 官方开发板 CPU 型号为 STM32MP257F --- 支持 DDR encryption/decryption
- 正点原子开发板 CPU 型号为 STM32MP257D --- 不支持 DDR encryption/decryption
解决方案: 在 CubeMX 的 RISAF4 配置中,取消勾选 DDR 加密选项。



7. OP-TEE 阶段:IAC 异常(RISAB 安全访问错误)
E/TC:0 0 stm32_iac_itr:192 IAC exceptions [159:128]: 0x1
E/TC:0 0 stm32_iac_itr:197 IAC exception ID: 128
E/TC:0 0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
解决方案: 修改 OP-TEE 设备树 stm32mp257d-stm32mp257dak3-mx-rif.dtsi 中 RISAB 保护寄存器配置:
diff
&tfa_bl31 {
- st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_NSEC, RIF_NPRIV, RIF_CFDIS, RIF_UNUSED, RIF_UNUSED, RIF_UNUSED)>;
+ st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_SEC, RIF_NPRIV, RIF_CFEN, RIF_CID1_BF, RIF_CID1_BF, RIF_CID1_BF)>;
};
&hpdma_lli {
- st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_NSEC, RIF_NPRIV, RIF_CFDIS, RIF_UNUSED, RIF_UNUSED, RIF_UNUSED)>;
+ st,protreg = <RISABPROT(RIF_DDCID_DIS, RIF_UNUSED, RIF_NSEC, RIF_NPRIV, RIF_CFEN, RIF_CID1_BF, RIF_CID1_BF, RIF_CID1_BF)>;
};


8. OP-TEE 阶段:TAMP NVRAM 驱动加载失败
E/TC:0 0 probe_driver_node:565 Failed to probe stm32_tamp_nvram on node nvram@46010100: 0xffff0006
E/TC:0 0 Panic at core/kernel/dt_driver.c:904 <probe_dt_drivers>
解决方案: 在 OP-TEE 设备树中添加 TAMP 节点配置:
dts
/* USER CODE BEGIN addons */
&tamp {
wakeup-source;
st,tamp-passive-precharge = <2>;
st,tamp-passive-nb-sample = <4>;
st,tamp-passive-sample-clk-div = <16384>;
tamp-button {
status = "okay";
tamper-gpios = <&gpioi 8 0>;
st,tamp-mode = <TAMPER_CONFIRMED_MODE>;
st,tamp-id = <1>;
};
};
/* USER CODE END addons */
9. OP-TEE 阶段:probe_dt_drivers Panic(PMIC 相关)
E/TC:0 0 probe_dt_drivers:902 Probe sequence result: 0x80000000
E/TC:0 0 Panic at core/kernel/dt_driver.c:904 <probe_dt_drivers>
解决方案: 检查 OP-TEE 设备树中的 PMIC 配置是否完整。
10. TF-A 阶段:FCONF dtb-registry 配置不完整
ERROR: FCONF: Incomplete configuration property in dtb-registry.
PANIC at PC : 0x000000000e0255fc
解决方案: 在 stm32mp257d-stm32mp257dak3-mx-fw-config.dts 中补全 dtb-registry:
dts
/* USER CODE BEGIN root */
dtb-registry {
soc_fw-config {
load-address = <0x0 0x81fc0000>;
max-size = <0x40000>;
};
tos_fw {
load-address = <0x0 0x82000000>;
max-size = <0x2000000>;
};
};
/* USER CODE END root */

11. OP-TEE 阶段:PMIC 与 GPU 驱动 probe 循环失败
D/TC:0 0 process_probe_list:697 Unresolved dependencies after 8 rounds, 7 deferred
E/TC:0 0 probe_dt_drivers:902 Probe sequence result: 0x80000000
E/TC:0 0 Panic at core/kernel/dt_driver.c:904 <probe_dt_drivers>
涉及 stm32_pmic2、stm32-cpu、stm32-gpu 三个驱动反复 deferred。
调试方法: 修改 OP-TEE 日志等级为 4,以获取更详细信息:
makefile
# 在 Makefile.sdk.stm32mp2 中修改
EXTRA_OEMAKE = PLATFORM=stm32mp2 CROSS_COMPILE_core=aarch64-ostl-linux- \
ARCH=arm CFG_ARM64_core=y CROSS_COMPILE_ta_arm64=aarch64-ostl-linux- \
NOWERROR=1 LDFLAGS= CFG_TEE_CORE_LOG_LEVEL=4 CFG_TEE_CORE_DEBUG=y
解决方案: 在 OP-TEE 设备树中增加 &pwr 节点内容。
12. OP-TEE 阶段:RISAF 访问异常(进入 U-Boot 时)
INFO: Entry point address = 0x84000000
E/TC:0 stm32_iac_itr:197 IAC exception ID: 137
DUMPING DATA FOR risaf@420d0000
I/TC: Faulty address (IADDR0): 0x84000000
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
状态: TODO --- 待进一步排查 RISAF 对 U-Boot 加载地址的访问权限配置。
13. OP-TEE 阶段:IAC 异常 ID 152
E/TC:0 stm32_iac_itr:197 IAC exception ID: 152
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
状态: 与 RISAF 防火墙配置相关,需排查对应外设的 RIF 权限。
14. OP-TEE 阶段:RISAF 访问异常(地址 0xfdc12f70)
DUMPING DATA FOR risaf@420d0000
I/TC: Faulty address (IADDR0): 0xfdc12f70
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
状态: 与 RISAF 防火墙配置相关,需排查对应内存区域的访问权限。
15. U-Boot 阶段:GPIOI8 安全访问失败(SD 卡检测)
gpio_stm32 gpio@442c0000: Failed to get secure IO GPIOI 8 @ 00000000442c0000
Card did not respond to voltage select! : -110
invalid MAC address 0 in OTP 00:00:00:00:00:00
解决方案: 在 CubeMX 中修改 GPIO I8 的 RIF 权限,允许非安全世界访问。
16. U-Boot 阶段:USB Gadget 初始化失败
Card did not respond to voltage select! : -110
No USB device found
usb_gadget_initialize failed
System reset not
解决方案: 参考并修正 stm32mp257d-stm32mp257dak3-mx-u-boot.dtsi 中的 USB 相关配置。
17. U-Boot 阶段:外设 RIF 权限不足
stm32_rifsc bus@42080000: phy@480c0000 not allowed on bus (-13)
stm32_rifsc bus@42080000: vdec@480d0000 not allowed on bus (-13)
stm32_rifsc bus@42080000: venc@480e0000 not allowed on bus (-13)
解决方案:
phy@480c0000(PCIe) --- 在 CubeMX 中开启对应外设vdec@480d0000(视频解码器) --- 在 CubeMX 中配置 RIF 权限venc@480e0000(视频编码器) --- 在 CubeMX 中配置 RIF 权限
18. U-Boot 阶段:SD 卡检测 GPIO 与 IAC 异常
STM32MP> gpio input GPIOI8
gpio: pin GPIOI8 (gpio 136) value is 0 # 插入
gpio: pin GPIOI8 (gpio 136) value is 1 # 拔出
操作 GPIO 后触发 IAC 异常:
E/TC:0 stm32_iac_itr:197 IAC exception ID: 156
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
解决方案: 检查 RCC 中 HSI MON 的配置。
19. 正点原子开发板 TAMP 功能异常
注意:正点原子的开发板不要使用 TAMP 功能!
此问题在断电后次日自动恢复正常,属于硬件相关的间歇性问题。

20. U-Boot 阶段:ADC 外设访问被拒
stm32_rifsc bus@42080000: adc@404f0000 not allowed on bus (-13)
解决方案: 待确认。可能需要在 ADC 节点补充电源配置:
dts
vdda-supply = <&vdda_1v8>;
vref-supply = <&vddref_1v8>;
21. OP-TEE 阶段:Display Controller RIFSC 访问被拒
E/TC:0 0 stm32_rifsc_dt_probe_bus:1058 RIFSC: display-controller@48010000 not accessible: 0xffff0001
E/TC:0 0 Panic at core/drivers/firewall/stm32_rifsc.c:1061 <stm32_rifsc_dt_probe_bus>
解决方案: 在 CubeMX 的 RIF 配置中,为 Display Controller 分配正确的访问权限。

22. U-Boot 阶段:MIPI 触摸屏与 LCD 面板 GPIO 权限问题
cannot find alientek,mipi-ts compatible
gpio_stm32 gpio@442a0000: Failed to acquire RIF access on IO GPIOG 7
gpio_stm32 gpio@442c0000: Failed to acquire RIF access on IO GPIOI 11
stm32-display-dsi dsi@48000000: No panel found -22
解决方案: 在 CubeMX 中为 GPIOG7、GPIOI11 配置正确的 RIF 访问权限。

23. Kernel 启动阶段:RISAF 访问异常
Starting kernel ...
E/TC:0 stm32_iac_itr:197 IAC exception ID: 137
DUMPING DATA FOR risaf@420d0000
I/TC: Faulty address (IADDR0): 0x80000020
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
解决方案: 检查 RISAF 对 Kernel 加载地址区域 (0x80000000) 的访问权限配置。

24. U-Boot 阶段:Kernel 启动后无输出
Starting kernel ...
I/TC: Reserved shared memory is disabled
I/TC: Dynamic shared memory is enabled
(之后无任何输出)
解决方案: 设置内核启动参数,启用串口控制台:
bash
setenv bootargs "console=ttySTM0,115200 earlycon"
25. U-Boot 阶段:FDT 内存预留失败
DRAM: ERROR: reserving fdt memory region failed (addr=a09f000 size=20000 flags=4)
ERROR: Failed to allocate 0x2a00000 bytes below 0x0.
解决方案: 检查设备树中的 reserved-memory 区域配置。

26. Linux 运行阶段:IAC 异常导致 CPU 停止
E/TC:0 1 stm32_iac_itr:197 IAC exception ID: 156
E/TC:0 1 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
I/TC: Halting CPU 1
伴随大量 sync_state() pending 信息,涉及 DMA、GPU、USB 等多个外设。
解决方案: 排查 IAC exception ID 156 对应的外设 RIF 权限配置。


27. Linux 运行阶段:galcore GPU 驱动加载超时
[ 35.882202] Time out check load galcore module expired
[ 48.136858] Time out check galcore device expired
[ 48.514707] Weston already configured on pixman
解决方案:
- 执行
depmod -a重建模块依赖 - 确认
modinfo galcore.ko显示的版本与uname -a的内核版本一致


28. Linux 运行阶段:无法挂载根文件系统(Kernel Panic)
[ 111.994340] VFS: Unable to mount root fs via NFS.
[ 112.018135] Kernel panic - not syncing: No working init found.
伴随大量 sync_state() pending 和 deferred probe pending 信息。
根因: 内核版本 6.6.78-g3378fcf598e4-dirty 与 /lib/modules/6.6.78 不匹配。
解决方案: 确保编译的内核版本与根文件系统中的模块版本一致。
29. Linux 运行阶段:SAI 音频播放触发 IAC 异常
bash
aplay -D hw:0,1 /usr/share/sounds/alsa/Front_Center.wav
触发 RISAB 安全访问异常:
E/TC:0 stm32_iac_itr:197 IAC exception ID: 129
DUMPING DATA FOR risab@42100000
I/TC: Faulty address (IADDR): 0xa020020
E/TC:0 Panic at core/drivers/firewall/stm32_iac.c:212 <stm32_iac_itr>
I/TC: Halting CPU 1
解决方案: 排查 SAI 使用的 DMA 缓冲区所在内存区域的 RISAB 权限配置,确保非安全世界的 DMA 可以访问该内存区域。
