詳解VisualS tudio Code開發Arm嵌入式Linux應用

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++ Intellisense,Makefile Creator 等。

Visual Studio Code 並不像 Visual Studio,後者集成瞭完整的代碼編輯、編譯和調試工具,Visual Studio Code 則提供瞭相應的框架,根據具體使用的編程語言和用戶習慣來實現對應的步驟或者任務。當然也有很多公司、組織或者個人提供現成的插件,這簡化瞭配置任務。目前 Visual Studio Code 還沒有現成的插件可以直接使用 Yocto Project 生成的 Linux SDK,因此我們通過直接配置 JSON 文件,制定相應的編譯和調試步驟。vscode-tdxlinux 是配置好的例程,接下來我們將對其中配置進行說明,以及介紹使用方法。

下載上面的例程後,在文件夾中會有下面文件。

hello.c 是一個演示代碼,Makefile 是編譯規則文件,.vscode 文件夾中四個 json 文件即用於配置 Visual Studio Code。

c_cpp_properties.json

env 中包含一些自定義的變量,例如 SDK 版本,開發板名字,以及 SDK 根目錄。可以用 $ 符號對其引用,例如 ${env.sdkroot} 引用 SDK 根目錄。

configurations 中是 Visual Studio Code 規定的一些設置。includePath 包含項目編譯用的頭文件所在目錄,這裡包括 SDK 中文件系統裡和 gcc 本身的頭文件。browse 是瀏覽頭文件時可以查找的目錄,常用於 VS Code 編寫代碼時用 Go To Definition 打開對應文件。defines 預定義一些宏,__linux__:指定目標系統為 Linux,__aarch64__:目標處理器為 64bit Arm。intelliSenseMode 將 IntelliSense Mode 映射到對應的平臺和處理器構架,Apalis iMX8 是 64 位處理器,所以這裡選擇 linux-gcc-arm64。這裡的配置還可以通過 ctl+shift+p 組合鍵盤選擇 UI 方式來配置。

settings.json

這裡定瞭一些變量,其他文件可以通過 ${config:var} 來引用,例如 ${config:tdxlinuxsdk.sdkroot}。

tasks.json

這裡配置瞭編譯相關的任務。

env 配置GCC 編譯工具,編譯參數等,這部分內容來自 SDK 的 environment-setup-aarch64-tdx-linux 文件。

tasks 中是具體編譯的任務,以及其實現方法。這裡我們使用 gcc 直接編譯文件,或者使用 make 執行 makefile 任務,或者單獨執行 makefile 一個任務。配置完成後可以按組合鍵 ctrl+shift+b 或者點擊 Terminal -> Run Build Task 調用相關任務。

launch.json

這裡配置調試方法。

嵌入式 Linux 通過使用 gdb 調試 C/C++ 應用。在 configurations 中 MIMode 為 gdb,miDebuggerPath 為 gdb 所在目錄,這是 SDK 中包含的軟件。

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.

編譯完成後可以通過 file 命令查看 hello 程序的格式屬性,ARM aarch64 格式。

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

在 Apalis iMX8 上運行 gbdserver 程序,偵聽端口為 1234。

在 hello.c 程序的 printf 函數設置一個斷點。

點擊 VS Code 中的調試按鍵。

點擊 step over 進行單步調試。

在 Apalis iMX8 調試串口中可以看到執行結果。

總結

上面是 VS Code 交叉編譯和調試的簡單介紹,提供瞭 Eclipse 之外的另一種開發環境。用戶可以重新調整配置文件,並配合其他插件如 Makefile Creator 實現個性化的 IDE。

到此這篇關於VisualStudioCode開發Arm嵌入式Linux應用的文章就介紹到這瞭,更多相關VisualStudioCode嵌入式Linux內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: