如何为ARM M7(STM32F767)构建可用的mbedtls-2.28.6库?
用CMake生成STM32F767(ARM Cortex-M7)适用的mbedTLS库详细步骤
1. 前置准备
- 确保
gcc-arm-none-eabi-10.3-2021.10的bin目录已添加至系统PATH。默认安装路径示例:C:\Program Files (x86)\GNU Arm Embedded Toolchain\10 2021.10\bin,可通过在控制台输入arm-none-eabi-gcc --version验证配置是否生效。 - 解压
mbedtls-2.28.6.zip至本地路径,例如C:\mbedtls-2.28.6。
2. 创建交叉编译工具链文件
在mbedTLS根目录下新建arm-stm32f7-toolchain.cmake文件,内容如下:
# 指定目标系统为嵌入式无OS环境 set(CMAKE_SYSTEM_NAME Generic) set(CMAKE_SYSTEM_PROCESSOR arm) # 指定ARM交叉编译器 set(CMAKE_C_COMPILER arm-none-eabi-gcc) set(CMAKE_ASM_COMPILER arm-none-eabi-gcc) set(CMAKE_CXX_COMPILER arm-none-eabi-g++) # STM32F767编译参数(Cortex-M7 + FPU硬浮点) set(COMMON_FLAGS "-mcpu=cortex-m7 -mfpu=fpv5-d16 -mfloat-abi=hard -mthumb -ffunction-sections -fdata-sections -Wall -Wextra") set(CMAKE_C_FLAGS "${COMMON_FLAGS} -std=c99") set(CMAKE_CXX_FLAGS "${COMMON_FLAGS} -std=c++11") set(CMAKE_ASM_FLAGS "${COMMON_FLAGS} -x assembler-with-cpp") # 禁用交叉编译时的可执行文件测试(嵌入式环境无法运行) set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) # 指定库的输出路径(可选) set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib)
3. 配置mbedTLS的config.h
进入C:\mbedtls-2.28.6\include\mbedtls,先复制config.h为config.h.backup(备份原文件),再修改config.h中的关键宏定义:
必须关闭的功能(针对无OS MCU)
#define MBEDTLS_FS_IO→ 注释掉或改为#undef MBEDTLS_FS_IO(禁用文件系统操作)#define MBEDTLS_PKCS11_C→ 注释掉或改为#undef MBEDTLS_PKCS11_C(取消PKCS#11支持)#define MBEDTLS_ZLIB_SUPPORT→ 注释掉或改为#undef MBEDTLS_ZLIB_SUPPORT(禁用zlib压缩)
必须开启的功能(HTTPS服务器需求)
- 确保
#define MBEDTLS_SSL_SERVER已开启(默认注释则取消注释) - 确保
#define MBEDTLS_ENTROPY_HARDWARE_ALT已开启(启用STM32硬件随机数生成,后续需自行实现mbedtls_hardware_poll函数) - 确认
MBEDTLS_RSA_C、MBEDTLS_SHA256_C、MBEDTLS_AES_C等HTTPS核心依赖算法已开启
可选优化(减小库体积)
- 注释掉不需要的加密算法、旧协议版本(如SSLv3、TLSv1.0)
- 设置
#define MBEDTLS_SSL_MAX_CONTENT_LEN 16384(根据MCU内存调整,默认值偏大)
4. 用CMake生成编译文件并编译
打开Windows控制台,执行以下步骤:
- 进入mbedTLS根目录:
cd C:\mbedtls-2.28.6
- 创建并进入编译输出目录:
mkdir build && cd build
- 运行CMake配置(指定工具链文件、禁用示例/测试):
cmake .. -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=../arm-stm32f7-toolchain.cmake -DCMAKE_BUILD_TYPE=Release -DMBEDTLS_BUILD_EXAMPLES=OFF -DMBEDTLS_BUILD_TESTS=OFF
若控制台找不到
mingw32-make,需将MinGW的bin目录添加至PATH,或改用"NMake Makefiles"生成器并对应调整后续编译命令。
- 执行编译:
mingw32-make -j4
-j4表示使用4线程编译,可根据CPU核心数调整数值。
5. 验证生成的库文件
编译完成后,build/library目录下会生成三个静态库:
libmbedtls.alibmbedcrypto.alibmbedx509.a
可通过以下命令验证库的架构是否为ARM Cortex-M7:
arm-none-eabi-readelf -h libmbedtls.a | grep "Machine"
输出应显示Machine: ARM,确认是适用于目标MCU的库文件。
内容的提问来源于stack exchange,提问作者Vladimír Šustek
相关产品推荐
相关产品推荐

