你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

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

[复制链接]
DM9600 发布时间:2024-12-16 01:01

前言

通常为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工程完成加载。截屏2024-12-15下午10.11.03.png

点击右上角编译图标完成编译。

截屏2024-12-15下午10.19.59.png

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

截屏2024-12-15下午10.29.27.png

右键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实现打断点,查看内存等操作。

截屏2024-12-15下午11.41.09.png

开始调试,功能正常。

截屏2024-12-15下午11.52.18.png

自编译

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

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

使用板载构建工具

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

截屏2024-12-16上午12.08.39.png

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

截屏2024-12-16上午12.27.34.png

可以看到编译正常。

截屏2024-12-16上午12.29.55.png

远程GDB调试

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

截屏2024-12-16上午12.30.47.png

总结

可以看到我们可以在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"
截屏2024-12-15 下午10.19.59.png
截屏2024-12-15 下午10.29.27.png
截屏2024-12-15 下午11.41.09.png
截屏2024-12-15 下午11.52.18.png
截屏2024-12-16 上午12.29.55.png
收藏 评论0 发布时间:2024-12-16 01:01

举报

0个回答

所属标签

相似分享

官网相关资源

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版