STM32
直播中

杨火亭

9年用户 1076经验值
擅长:控制/MCU
私信 关注
[问答]

STM32CubeIDE报错编译STM32MP135(Projects\\STM32MP135C-DK\\External_Loader)的原因?

09:39:09 **** Incremental Build of configuration Debug for project External_Mem_Loader_A7 ****

make all

arm-none-eabi-gcc "../syscalls.c" -mcpu=cortex-a7 -std=gnu11 -g3 -DSTM32MP135Fxx -DCORE_CA7 -DNO_CACHE_USE -DNO_MMU_USE -DUSE_HAL_DRIVER -DUSE_FULL_ASSERT -DUSE_FULL_LL_DRIVER -D__LOG_UART_IO_ -D__CP_SERIAL_BOOT__ -DSDCARD_FLASH -c -I.. -I../../ -I../../Inc -I../../OpenBootloader/Target -I../../OpenBootloader/App -I../../USB_Device/App -I../../USB_Device/Target -I../../../../../../Drivers/CMSIS/Core_A/Include -I../../../../../../Drivers/CMSIS/Device/ST/STM32MP13xx/Include -I../../../../../../Drivers/STM32MP13xx_HAL_Driver/Inc -I../../../../../../Drivers/BSP/STM32MP13xx_DISCO -I../../../../../../Drivers/BSP/Components/Common -I../../../../../../Middlewares/ST/OpenBootloader/Core -I../../../../../../Middlewares/ST/OpenBootloader/Util -I../../../../../../Middlewares/ST/OpenBootloader/Modules/USART -I../../../../../../Middlewares/ST/OpenBootloader/Modules/USB -I../../../../../../Middlewares/ST/OpenBootloader/Modules/Mem -I../../../../../../Middlewares/ST/STM32_USB_Device_Library/Core/Inc -I../../../../../../Middlewares/ST/STM32_USB_Device_Library/Class/DFU/Inc -I../../../../../../Middlewares/ST/STM32_USB_Device_Library/Class/CompositeBuilder/Inc -Og -ffunction-sections -Wall -Wno-strict-aliasing -fstack-usage -fcyclomatic-complexity -MMD -MP -MF"syscalls.d" -MT"syscalls.o" --specs=nano.specs -mfpu=vfpv4-d16 -mfloat-abi=hard -mthumb -o "syscalls.o"

arm-none-eabi-gcc -o "External_Mem_Loader_A7.elf" @"objects.list"   -mcpu=cortex-a7 -T"../stm32mp13xx_a7_sysram.ld" --specs=nosys.specs -Wl,-Map="External_Mem_Loader_A7.map" -Wl,--gc-sections -static --specs=nano.specs -mfpu=vfpv4-d16 -mfloat-abi=hard -mthumb -Wl,--start-group -lc -lm -Wl,--end-group

F:/ST/STM32CubeIDE_1.18.1/STM32CubeIDE/plugins/com.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344/tools/bin/../lib/gcc/arm-none-eabi/13.3.1/../../../../arm-none-eabi/bin/ld.exe: warning: cannot find entry symbol Reset_Handler; not setting start address

Finished building target: External_Mem_Loader_A7.elf

arm-none-eabi-size  External_Mem_Loader_A7.elf

text           data            bss            dec            hex        filename

4096              8           1568           5672           1628        External_Mem_Loader_A7.elf

Finished building: default.size.stdout

arm-none-eabi-objdump -h -S External_Mem_Loader_A7.elf  > "External_Mem_Loader_A7.list"

Finished building: External_Mem_Loader_A7.list

arm-none-eabi-objcopy  -O binary External_Mem_Loader_A7.elf  "External_Mem_Loader_A7.bin"

Finished building: External_Mem_Loader_A7.bin

../../../../../../Utilities/ImageHeader/postbuild_STM32MP13.sh  "F:STSTM32CubeIDE_1.18.1STM32CubeIDEpluginscom.st.stm32cube.ide.mcu.externaltools.gnu-tools-for-stm32.13.3.rel1.win32_1.0.0.202411081344toolsbin" "External_Mem_Loader_A7"

Postbuild with windows executable

readelf_path                = objcopy_path                = elf_entry_point             =<0x0>

formatted_ep_addr           =<00000000>

../../../../../../Utilities/ImageHeader/postbuild_STM32MP13.sh: line 75: F:/Program: Permission denied

postbuild_STM32MP13.sh failed

回帖(1)

往事只能回首

2025-7-17 17:44:46

在STM32CubeIDE中编译STM32MP135的External_Loader项目时遇到错误(如External_Mem_Loader_A7),可能有以下原因及解决方法:




常见错误原因:




  1. 头文件路径缺失或错误  



    • 项目中引用的头文件未正确包含(如syscalls.c依赖的标准库或HAL头文件缺失)。

    • 检查编译命令中的-I路径,如../../OpenBootloader/Target等是否存在。




  2. 宏定义冲突  



    • 宏如NO_CACHE_USENO_MMU_USE可能与STM32MP135硬件特性冲突(该芯片需MMU/Cache支持)。

    • __CP_SERIAL_BOOT__SDCARD_FLASH未正确配置。




  3. 工具链兼容性问题  



    • arm-none-eabi-gcc版本不兼容Cortex-A7(需支持ARMv7-A架构)。

    • STM32CubeIDE可能未正确配置A7核心的编译工具链。




  4. 系统调用实现错误  



    • syscalls.c文件中的底层函数(如_write()_read())未适配A7核心或无操作系统的环境。




  5. 项目配置错误  



    • 未选择正确的目标设备(STM32MP135Fxx)。

    • 编译选项(如-mcpu=cortex-a7)与设备不匹配。






解决方法:




  1. 检查头文件路径  



    • 右键项目 → PropertiesC/C++ BuildSettingsTool SettingsIncludes,确认所有路径有效。  

    • 确保路径包含STM32MP1xx HAL库和启动文件(如Drivers/STM32MP1xx_HAL_Driver/Inc)。




  2. 验证宏定义  



    • 删除潜在冲突宏(如-DNO_MMU_USE),STM32MP135默认需要MMU。  

    • 检查Predefined Symbols中的宏(在项目属性中),确保与STM32MP135C-DK示例工程一致。




  3. 更新工具链  



    • 使用STM32CubeIDE内置的ARM GCC版本(建议≥10.3.1)。  

    • 在项目属性中确认编译器为arm-none-eabi-gcc且路径正确。




  4. 修复syscalls.c  



    • 确保实现了必要的函数(参考最小示例):
      #include 
      int _write(int fd, char* ptr, int len) {
      // 实现串口输出(根据__LOG_UART_IO_)
      return len;
      }
      void _exit(int status) { while(1); } // 死循环

    • 删除无关的或冲突的函数实现。




  5. 重新生成项目  



    • 从STM32CubeMX重新生成加载器代码:

      FileNewSTM32 Project → 选择STM32MP135F-DK → 启用External loader选项。

    • 或复制官方示例:STM32Cube_FW_MP1_VX.X.X/Projects/STM32MP135C-DK/External_Loader




  6. 清理并重新编译  



    • 执行 Project → Clean 清除缓存,再重新编译。






其他建议:



  • 查看完整错误日志

    在IDE控制台找到具体的错误描述(如未定义函数_sbrk或头文件缺失)。

  • 检查设备支持包(DFP)

    通过 Help → Manage Embedded Software Packages 更新STM32MP1 DFP。

  • 参考官方文档

    UM3029 - STM32MP1外部加载器开发指南


通过逐步排除上述问题,可解决大多数编译错误。如仍有问题,请提供完整的错误日志进一步分析。

举报

更多回帖

发帖
×
20
完善资料,
赚取积分