【STM32MP257】轻松搭建A35 Linux编译及调试环境

前言

通常为ARMv7这类SoC进行Linux应用编程需要在计算机Linux环境中上使用厂商提供的交叉编译器进行程序编译,然后将程序上传至Linux文件系统,运行程序。因为嵌入式ARM处理器的性能架构原因需要借助运行在x86_64平台上的交叉编译器完成armv7架构程序的编译,这种跨平台的工作流程俗称“交叉/cross”。也确实,随着Windows、Mac也逐渐涉足ARM64阵营,在未来像这种为ARM Linux编译的过程可能也不能完全叫“交叉编译”了。

如果你玩过树莓派、RK系列的板卡,那你一定会注意到,对于这类aarch64架构的SoC,文件系统或APT源仓库中基本都提供了适用于自身架构的GCC编译器、CMake或Meson构建工具、GDB调试工具,这将非常的方便,暂且不谈编译性能和第三方库是否全面,使用远程的方式进行构建、调试,还是非常方便的。

STM32MP2是ST第一款64位微处理器,内置双Cortex A35,以Yocto构建的文件系统中可以使用APT从ST官方源中获取GCC、CMake、GDB这些常用构建编译调试工具,也借此机会,和大家分享以下内容:

  • 交叉编译:STM32MPU SDK的部署以及工程的构建编译
  • 自编译:在STM32MP2上直接完成构建编译过程

交叉编译

使用常规的交叉编译方式构建Linux应用程序适用于所有所有STM32MPU,使用MP13、MP15、MP25的小伙伴都可参考。

安装SDK

首先需要安装SDK,ST MPU的SDK在Developer Package中分发,SDK提供了独立的交叉开发工具链和针对板上闪存的特定映像内容量身定制的库,用于构建A核应用程序和BSP源码。具体过程参考👉🏻STM32MPU开发包-5.1.安装SDK

SDK的安装非常简单,下载->解压->运行sh脚本安装部署SDK。我们需要特别注意安装后的日志输出:

ST OpenSTLinux - Weston - (A Yocto Project Based Distro) SDK installer version 5.0.3-openstlinux-6.6-yocto-scarthgap-mpu-v24.11.06
===================================================================================================================================
You are about to install the SDK to "<working directory absolute path>/Developer-Package/SDK". Proceed [Y/n]? 
Extracting 
SDK.........................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa35-ostl-linux

与之前我用过的Linaro提供的SDK不同,SDK安装日志提示我们,当我们在任何时候在一个新的Shell环境中使用SDK时,需要使用source <working directory absolute path>/Developer-Package/SDK/environment-setup-cortexa35-ostl-linux命令初始化环境,否则在编译时会出现找不到库文件的包含路径等问题。

使用SDK构建应用程序

使用CLion可以轻松创建基于CMake的C语言项目,项目使用CMakeList.txt文件管理参与编译的源文件、包含路径、参与链接的库文件以及为GCC额外传递的编译参数,之前也与大家分享过通用CMakeList.txt模板可以参考,详见👉🏻【CMake】通用的基于CMake的C可执行文件项目CMakeList文件模板

CLion使用CMake管理项目,同时还要配置编译器及构建工具,打开CLion设置,配置工具链,你选择基于WSL或远程主机作为凭据,体验基本一致。如图首先点击添加环境->来自文件,选择刚刚安装SDK时最后提示的环境初始化脚本文件,稍等片刻,CLion会自动识别到SDK环境初始化完成后的C编译器以及C++编译器。

调试器GDB的路径获取方式使用source命令完成SDK环境初始化后使用which $GDB获取。随后在CMake选择我们配置好的工具链,等待CMake工程完成加载。

请添加图片描述

点击右上角编译图标完成编译。
请添加图片描述

如果刚刚你配置的工具链是使用远程主机作为凭据创建的,则在构建时CLion会将工程路径拷贝至远程主机的临时路径进行编译,完成编译后应用程序仍然在远程主机端,而CLion默认并不会自动将编译好的二进制文件拷贝回本地工程路径,需要点击工具->部署->配置菜单,将构建路径从远程编译主机的“排除的路径”中移除。

请添加图片描述

右键CLion工程中的构建目录->部署->下载自->选择你的工具链名称,即可将二进制文件从远程编译主机中下载至本地。

如果你使用的是WSL,那么不会出现该问题,编译后的二进制文件本身就在构建目录下,因为工程路径本身就在WSL的/mnt路径下,直接编译,直接就生成了。

远程GDB调试

编译好的二进制程序已经通过刚才的操作存在于构建路径下,此时即可通过CLion使用GDB调试工具对程序进行打断点调试。

CLion右上角的构建菜单中选择“编辑配置”,打开“运行/调试配置”对话框,左上角添加“远程GDB服务器配置”,对远程GDB调试参数进行配置。如图对远程GDB参数进行解释。

  • 名称:随便写
  • 目标和可执行文件:选择编译好的程序
  • GDB:要选择远程编译主机工具链中的GDB
  • 凭据:使用SSH连接的开发板
  • 上传路径:开始调试时程序上传到开发板的路径
  • 'target remote’实参:保持默认,默认端口就是1234,这是告诉远程主机工具链中的GDB调试时该连接到远程开发板gdbserver的IP和端口
  • GDB服务器:选择开发板上的gdbserver路径,默认位置就是/usr/bin/gdbserver,确认开发板上存在,或使用which命令确认
  • GDB服务器实参:保持默认,这是告诉开发板gdbserver的服务端口是1234,等待远程GDB连接

总结:理清思路,调试前二进制文件在本地,调试时二进制文件会上传至开发板指定目录,并运行开发板上的gdbserver端口1234,调试器是工具链中的GDB,调试时是GDBgdbserver之间的交互,并将调试信息传递给CLion,通过GUI实现打断点,查看内存等操作。

请添加图片描述

开始调试,功能正常。

请添加图片描述

自编译

STM32MP2文件系统使用Yocto构建,默认不包含板载GCC等编译构建工具,但ST已将适用于aarch64 架构的常用开发工具上传至APT源中,可使用以下指令获得,实现自编译。

sudo apt update
sudo apt install packagegroup-core-buildessential cmake gdb rsync

使用板载构建工具

新建CLion工具链配置,此时无需配置环境文件,CLion将自动检测到板载构建编译工具,CMake工具链也选择刚刚新建的工具链配置。
请添加图片描述

CMake工程在初始化时弹出开发板SSH登录信息一定要勾选保存密码,否则不能完成CMake工程代码的上传,不知道是不是CLion的bug。。。

请添加图片描述

可以看到编译正常。

请添加图片描述

远程GDB调试

远程GDB调试中只需将GDB修改为开发板上的GDB即可。

请添加图片描述

总结

可以看到我们可以在STM32MP2上使用板载GCC完成程序的构建编译以及调试过程,相比交叉编译也方便很多。

通过板载构建环境不仅可以轻松编译自己编写的程序,也可轻松编译第三方开源项目及库文件。

你也完全可以通过修改Yocto构建中的配置文件,使文件系统默认包含CMake、GCC等常用构建编译工具,详见👉🏻How to add native gcc to linux distribution?该方法同样适用于MP1系列。

需要注意,修改Yocto的local.conf文件时需要注意CONF_VERSION字段的值

  • CONF_VERSION = "1"时,填写

    IMAGE_INSTALL_append = " packagegroup-core-buildessential"
    
  • CONF_VERSION = "2"时,填写

    IMAGE_INSTALL += " packagegroup-core-buildessential"
    
<think>好的,用户想了解STM32MP157和STM32MP257的主要差异。首先,我需要回忆一下这两个芯片的基本信息。STM32MP1系列是STMicroelectronics的微处理器产品线,主要针对嵌入式应用。用户之前提到过STM32MP135STM32MP157的区别,现在转向了更高端的MP257。 首先,处理器核心可能不同。STM32MP157采用的是双核Cortex-A7加Cortex-M4的组合,而STM32MP257可能升级到更强大的内核,比如Cortex-A35或者Cortex-A5x系列,或者可能提升主频速度。需要查证具体型号的参数。 其次,处理能力方面,主频提升会直接影响性能。例如,MP157的主频可能在650MHz到800MHz之间,而MP257可能达到更高的频率,比如1GHz以上,这会显著提升计算能力。 然后是外设和接口的差异。MP257可能支持更多的通信接口,比如USB 3.0、更高速的以太网,或者更多的PCIe通道。另外,图形处理单元(GPU)可能升级,支持更高分辨率的显示或者更复杂的图形处理任务。 工艺制程也是一个关键点。新的型号可能采用更先进的制程技术,如28nm升级到16nm,从而降低功耗并提高能效比。这对于需要长时间运行或电池供电的应用尤为重要。 内存支持方面,MP257可能支持更大容量的RAM或者更快的存储接口,比如LPDDR4X或DDR4,而MP157可能只支持LPDDR3或DDR3L。这会影响处理多任务的能力和数据传输速度。 另外,安全特性也是差异点之一。新的MP257可能增强安全模块,支持更多的加密算法,安全启动,硬件隔离技术等,满足更高安全需求的应用场景。 应用场景方面,MP157适用于工业控制、医疗设备等中端应用,而MP257可能更适合需要高性能计算的场景,如高端工业自动化、AI边缘计算或复杂的图形界面处理。 最后,价格和供货情况也是用户可能关心的因素。通常新一代产品可能在成本上有所优化,但具体需要参考市场信息。 需要验证这些信息是否准确,可能需要查阅ST官方资料或对比文档。同时要注意用户之前的引用提到MP157相对于MP135的优势,现在对比MP257,应该突出MP257的升级点,帮助用户理解不同型号的适用场景。</think>### STM32MP157 与 STM32MP257 主要差异分析 #### 1. **处理器架构与性能** - **STM32MP157**: 采用双核**Cortex-A7**(主频最高 **800MHz**) + **Cortex-M4**(主频 **209MHz**)的异构架构,适用于中端嵌入式场景[^1]。 - **STM32MP257**: 升级为双核**Cortex-A35**(主频最高 **1.5GHz**) + **Cortex-M33**,显著提升计算能力,支持更复杂的实时任务和高性能计算需求。 #### 2. **图形处理能力** - **STM32MP157**: 集成 **Vivante GPU**(GC320),支持基础的2D/3D图形加速。 - **STM32MP257**: 配备更强的 **3D GPU**(如Arm Mali-G52),支持更高分辨率显示(如4K)和复杂图形渲染,适合人机界面(HMI)和多媒体应用。 #### 3. **外设与接口** - **STM32MP157**: - 支持 **USB 2.0**、**千兆以太网**、**CAN FD**。 - 提供 **16-bit DDR3/LPDDR3** 内存接口。 - **STM32MP257**: - 新增 **USB 3.0**、**双千兆以太网**、**PCIe接口**。 - 支持 **32-bit LPDDR4/DDR4**,内存带宽提升至 **4.2GB/s**。 #### 4. **工艺与能效** - **STM32MP157**: 基于 **28nm FD-SOI** 工艺,平衡功耗与性能。 - **STM32MP257**: 采用 **16nm FinFET** 工艺,功耗降低约 **30%**,同时提升主频和能效比。 #### 5. **安全特性** - **STM32MP157**: 支持基础的硬件加密(如AES、HASH)。 - **STM32MP257**: 增强安全模块,新增 **TEE(可信执行环境)**、**Secure Boot 2.0**,符合工业级安全标准(如IEC 61508)。 #### 6. **应用场景对比** | 型号 | 典型应用场景 | 适用需求 | |---------------|---------------------------------------|------------------------------| | STM32MP157 | 工业控制、医疗设备、智能家居 | 中端计算、基础图形显示 | | STM32MP257 | 高端HMI、边缘AI推理、5G网关 | 高性能、高带宽、强安全需求 | #### 7. **开发支持** - **STM32MP257** 提供更完整的 **AI工具链**(如TensorFlow Lite Micro支持)和 **实时操作系统(RTOS)优化**,而STM32MP157主要依赖Linux生态。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值