从零开始打造 OpenSTLinux 6.6 Yocto 系统 - STM32MP2(基于STM32CubeMX)(八)

张开发
2026/4/16 14:30:52 15 分钟阅读

分享文章

从零开始打造 OpenSTLinux 6.6 Yocto 系统 - STM32MP2(基于STM32CubeMX)(八)
基于正点原子 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.状态正常现象可忽略。参考https://community.st.com/t5/stm32-mpus-software-development/sdmmc1-sdmmc2-only-one-memory-boot-device-can-be-assigned-to-tf/m-p/854989#M2196Main Config: These peripherals still have some not configured or wrong parameter values: [RCC]状态ST 官方已确认问题正在解决。参考https://community.st.com/t5/stm32-mpus-software-development/stm32mp25-cubemx-rcc-warning-when-hse-set-to-crystal-ceramic/m-p/854940#M21982. TF-A 阶段USB 控制台报错ERROR: usb_core_ctl_error : Send an ERROR解决方案在fw-config.dts中添加dtb-registry节点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_initBACKTRACE: START: stm32mp2_ddr_init ... PANIC at PC : 0x000000000e01e3d0解决方案在设备树中补全 DDR 电源配置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 PANICNOTICE: 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 保护寄存器配置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 nvram46010100: 0xffff0006 E/TC:0 0 Panic at core/kernel/dt_driver.c:904 probe_dt_drivers解决方案在 OP-TEE 设备树中添加 TAMP 节点配置/* 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 PanicPMIC 相关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/* 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.sdk.stm32mp2 中修改 EXTRA_OEMAKE PLATFORMstm32mp2 CROSS_COMPILE_coreaarch64-ostl-linux- \ ARCHarm CFG_ARM64_corey CROSS_COMPILE_ta_arm64aarch64-ostl-linux- \ NOWERROR1 LDFLAGS CFG_TEE_CORE_LOG_LEVEL4 CFG_TEE_CORE_DEBUGy解决方案在 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 risaf420d0000 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 152E/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 访问异常地址 0xfdc12f70DUMPING DATA FOR risaf420d0000 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 gpio442c0000: 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 bus42080000: phy480c0000 not allowed on bus (-13) stm32_rifsc bus42080000: vdec480d0000 not allowed on bus (-13) stm32_rifsc bus42080000: venc480e0000 not allowed on bus (-13)解决方案phy480c0000(PCIe) — 在 CubeMX 中开启对应外设vdec480d0000(视频解码器) — 在 CubeMX 中配置 RIF 权限venc480e0000(视频编码器) — 在 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 bus42080000: adc404f0000 not allowed on bus (-13)解决方案待确认。可能需要在 ADC 节点补充电源配置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-controller48010000 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 gpio442a0000: Failed to acquire RIF access on IO GPIOG 7 gpio_stm32 gpio442c0000: Failed to acquire RIF access on IO GPIOI 11 stm32-display-dsi dsi48000000: 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 risaf420d0000 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 之后无任何输出解决方案设置内核启动参数启用串口控制台setenv bootargsconsolettySTM0,115200 earlycon25. U-Boot 阶段FDT 内存预留失败DRAM: ERROR: reserving fdt memory region failed (addra09f000 size20000 flags4) 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 异常aplay-Dhw:0,1 /usr/share/sounds/alsa/Front_Center.wav触发 RISAB 安全访问异常E/TC:0 stm32_iac_itr:197 IAC exception ID: 129 DUMPING DATA FOR risab42100000 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 可以访问该内存区域。

更多文章