新闻  |   论坛  |   博客  |   在线研讨会
VisualStudioCode开发Arm嵌入式Linux应用
toradex | 2021-04-22 15:05:17    阅读:556   发布文章

By Toradex胡珊逢

Visual Studio Code 在软件开发领域具有十分广泛的应用,其支持多种编程语言,丰富的插件极大得提高了开发效率,同时这也是一个非常开放的平台。本文接下来将介绍如何在 Visual Studio Code 中使用 Yocto Project 生成的 Linux SDK,并针对 Arm 处理器进行 C/C++ 应用交叉编译和调试。

 

首先使用 Yocto Project 生成 SDK,我们这里以 Apalis iMX8 上的 minimal console image 为例,其对应的 SDK tdx-xwayland-glibc-x86_64-Reference-Minimal-Image-aarch64-apalis-imx8-toolchain-5.2.0.sh。直接运行该文件,将其安装到 Linux 电脑上,例如 /home/ben/Toradex/LinuxDevelop/LinuxSDK/v5/arm64 路径下。

 

然后参考这里的说明 Linux 电脑上安装 Visual Studio Code。在 Extension 中安装一些常用的插件,如 C/C++C++ IntellisenseMakefile Creator 等。

 

Visual Studio Code 并不像 Visual Studio,后者集成了完整的代码编辑、编译和调试工具,Visual Studio Code 则提供了相应的框架,根据具体使用的编程语言和用户习惯来实现对应的步骤或者任务。当然也有很多公司、组织或者个人提供现成的插件,这简化了配置任务。目前 Visual Studio Code 还没有现成的插件可以直接使用 Yocto Project 生成的 Linux SDK,因此我们通过直接配置 JSON 文件,制定相应的编译和调试步骤。vscode-tdxlinux 是配置好的例程,接下来我们将对其中配置进行说明,以及介绍使用方法。

 

下载上面的例程后,在文件夹中会有下面文件。

image001.png

 

hello.c 是一个演示代码,Makefile 是编译规则文件,.vscode 文件夹中四个 json 文件即用于配置 Visual Studio Code

 

c_cpp_properties.json

image002.png

 

env 中包含一些自定义的变量,例如 SDK 版本,开发板名字,以及 SDK 根目录。可以用 $ 符号对其引用,例如 ${env.sdkroot} 引用 SDK 根目录。

 

image004.png

configurations 中是 Visual Studio Code 规定的一些设置。includePath 包含项目编译用的头文件所在目录,这里包括 SDK 中文件系统里和 gcc 本身的头文件。browse 是浏览头文件时可以查找的目录,常用于 VS Code 编写代码时用 Go To Definition 打开对应文件。defines 预定义一些宏,__linux__:指定目标系统为 Linux__aarch64__:目标处理器为 64bit ArmintelliSenseMode IntelliSense Mode 映射到对应的平台和处理器构架,Apalis iMX8 64 位处理器,所以这里选择 linux-gcc-arm64。这里的配置还可以通过 ctl+shift+p 组合键盘选择 UI 方式来配置。

image006.png

 

settings.json

image008.png

这里定了一些变量,其他文件可以通过 ${config:var} 来引用,例如 ${config:tdxlinuxsdk.sdkroot}

 

tasks.json

这里配置了编译相关的任务。

image010.png

env 配置GCC 编译工具,编译参数等,这部分内容来自 SDK environment-setup-aarch64-tdx-linux 文件。

 

image012.png

tasks 中是具体编译的任务,以及其实现方法。这里我们使用 gcc 直接编译文件,或者使用 make 执行 makefile 任务,或者单独执行 makefile 一个任务。配置完成后可以按组合键 ctrl+shift+b 或者点击 Terminal -> Run Build Task 调用相关任务。

image014.png

 

 

launch.json

这里配置调试方法。

image016.png

嵌入式 Linux 通过使用 gdb 调试 C/C++ 应用。在 configurations MIMode gdbmiDebuggerPath gdb 所在目录,这是 SDK 中包含的软件。

 

image018.png

customLaunchSetupCommands gdb 具体执行步骤。首先使用 gdb target remote extend-remote 连接 IP 192.168.20.91 目标设备即 Apalis iMX8,端口为1234。第二步 remote put 将本地编译好的 hello 二进制文件上传到 Apalis iMX8。最后在 main 函数处设置一个断点。通过上面设置,点击 VS Code 中的 debug 即可进入调试。上面的每个步骤同样可以根据项目或者用户习惯调整。下面我们将演示从编译到调试的流程。

 

按组合键 ctrl+shift+b 选择 TdxLinux SDK Make.

image020.png

 

编译完成后可以通过 file 命令查看 hello 程序的格式属性,ARM aarch64 格式。

image022.png

 

查看 Apalis iMX8 IP 地址。192.168.20.97 也是 launch.json 中设置的 IP

image024.png

 

Apalis iMX8 上运行 gbdserver 程序,侦听端口为 1234

image025.png

 

 

hello.c 程序的 printf 函数设置一个断点。

image026.png

 

点击 VS Code 中的调试按键。

image028.png

 

 

点击 step over 进行单步调试。

image030.png

 

Apalis iMX8 调试串口中可以看到执行结果。

image032.png

 

 

总结

上面是 VS Code 交叉编译和调试的简单介绍,提供了 Eclipse 之外的另一种开发环境。用户可以重新调整配置文件,并配合其他插件如 Makefile Creator 实现个性化的 IDE


*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客