前言通常为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这些常用构建编译调试工具,也借此机会,和大家分享以下内容:
交叉编译使用常规的交叉编译方式构建Linux应用程序适用于所有所有STM32MPU,使用MP13、MP15、MP25的小伙伴都可参考。 安装SDK首先需要安装SDK,ST MPU的SDK在Developer Package中分发,SDK提供了独立的交叉开发工具链和针对板上闪存的特定映像内容量身定制的库,用于构建A核应用程序和BSP源码。具体过程参考👉🏻STM32MPU开发包-5.1.安装SDK。 SDK的安装非常简单,下载->解压->运行sh脚本安装部署SDK。我们需要特别注意安装后的日志输出:
与之前我用过的Linaro提供的SDK不同,SDK安装日志提示我们,当我们在任何时候在一个新的Shell环境中使用SDK时,需要使用 使用SDK构建应用程序使用CLion可以轻松创建基于CMake的C语言项目,项目使用 CLion使用CMake管理项目,同时还要配置编译器及构建工具,打开CLion设置,配置工具链,你选择基于WSL或远程主机作为凭据,体验基本一致。如图首先点击添加环境->来自文件,选择刚刚安装SDK时最后提示的环境初始化脚本文件,稍等片刻,CLion会自动识别到SDK环境初始化完成后的C编译器以及C++编译器。 调试器GDB的路径获取方式使用 点击右上角编译图标完成编译。 如果刚刚你配置的工具链是使用远程主机作为凭据创建的,则在构建时CLion会将工程路径拷贝至远程主机的临时路径进行编译,完成编译后应用程序仍然在远程主机端,而CLion默认并不会自动将编译好的二进制文件拷贝回本地工程路径,需要点击工具->部署->配置菜单,将构建路径从远程编译主机的“排除的路径”中移除。 右键CLion工程中的构建目录->部署->下载自->选择你的工具链名称,即可将二进制文件从远程编译主机中下载至本地。 如果你使用的是WSL,那么不会出现该问题,编译后的二进制文件本身就在构建目录下,因为工程路径本身就在WSL的/mnt路径下,直接编译,直接就生成了。 远程GDB调试编译好的二进制程序已经通过刚才的操作存在于构建路径下,此时即可通过CLion使用GDB调试工具对程序进行打断点调试。 CLion右上角的构建菜单中选择“编辑配置”,打开“运行/调试配置”对话框,左上角添加“远程GDB服务器配置”,对远程GDB调试参数进行配置。如图对远程GDB参数进行解释。
总结:理清思路,调试前二进制文件在本地,调试时二进制文件会上传至开发板指定目录,并运行开发板上的 开始调试,功能正常。 自编译STM32MP2文件系统使用Yocto构建,默认不包含板载GCC等编译构建工具,但ST已将适用于aarch64 架构的常用开发工具上传至APT源中,可使用以下指令获得,实现自编译。
使用板载构建工具新建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的
|
【STM32MP257】🥳STM32MP257-DK-开发板开箱体验
【STM32MP157】从ST官方例程中分析RPMsg-TTY/SDB核间通信的使用方法
【STM32MPU 安全启动】 TF-A BL2 TrustedBoot原理学习
《STM32MPU安全启动》学**结
《STM32MPU安全启动》学习心得
《STM32MPU安全启动》学习笔记之uboot如何校验kernel和如何使能校验
《STM32MPU安全启动》学习笔记之optee 如何加载CORTEX-M核和使能校验
《STM32MPU安全启动》学习笔记之TF-A BL2校验optee和uboot的流程以及如何使能
《STM32MPU安全启动》学习笔记+STM32MP系列mpu安全启动解析
《STM32MPU安全启动》学习笔记 - STM32MPU安全启动学**结