【Linux学习】WSL2+VSCode搭建ARM交叉编译环境
WSL2 VSCode 交叉编译工具链的搭建是构建高效、便捷的Linux ARM嵌入式开发环境的主流方案。它结合了Windows的易用性、WSL2近乎原生的Linux兼容性以及VSCode强大的编辑和远程开发能力。以下将详细阐述搭建步骤、核心配置以及一个完整的实战示例。一、环境搭建全景与优势对比首先通过下表可以清晰地看到基于WSL2的方案与传统虚拟机方案的对比以及本方案的核心组件构成特性/方案传统虚拟机 (VMware/VirtualBox)WSL2 VSCode (本方案)本方案核心组件与作用性能虚拟化开销大I/O、编译速度慢近乎原生Linux性能直接访问Windows文件系统编译速度显著提升WSL2: 提供完整的Linux内核实现高性能子系统。系统集成隔离性强文件共享需配置深度集成可在\\wsl$下直接访问Linux文件VSCode无缝连接VSCode: 作为统一的代码编辑、构建和调试界面。资源占用需要为虚拟机预先分配固定内存和存储动态资源管理更轻量资源利用率高交叉编译工具链: 在WSL2中运行生成ARM平台的可执行文件。开发体验需要在宿主系统和虚拟机间切换无缝体验在Windows上使用VSCode直接编辑、构建WSL中的代码VSCode “Remote - WSL” 插件: 实现远程开发所有操作在WSL环境内完成。适用场景需要完全独立Linux环境或特定老版本系统现代嵌入式/Linux应用开发追求效率和便捷性CMake/GCC/OpenOCD等: 构成完整的编译、调试工具集。二、详细搭建步骤步骤1安装与配置WSL2启用Windows功能以管理员身份打开PowerShell运行以下命令启用“适用于Linux的Windows子系统”和“虚拟机平台”。# 打开PowerShell (管理员) dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart执行后重启计算机。安装WSL2内核更新包从微软官网下载并安装 WSL2 Linux 内核更新包。设置WSL2为默认版本wsl --set-default-version 2安装Linux发行版打开Microsoft Store搜索并安装“Ubuntu 22.04 LTS”或“Ubuntu 20.04 LTS”。安装后从开始菜单启动Ubuntu完成初始用户和密码设置。步骤2在WSL2中安装交叉编译工具链假设目标平台为ARM Cortex-A系列如RK3562使用的ARMv8-A我们安装gcc-aarch64-linux-gnu。在WSL2的Ubuntu终端中更新软件源并安装工具链sudo apt update sudo apt upgrade -y sudo apt install -y gcc-aarch64-linux-gnu g-aarch64-linux-gnu注对于ARMv7Cortex-A7/A9等平台应安装gcc-arm-linux-gnueabihf。验证安装是否成功aarch64-linux-gnu-gcc --version应输出类似aarch64-linux-gnu-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0的信息。步骤3安装与配置VSCode及远程开发插件安装VSCode从 VSCode官网 下载并安装。安装“Remote - WSL”扩展打开VSCode点击左侧活动栏的“扩展”图标搜索“Remote - WSL”由Microsoft发布点击安装。连接到WSL2在VSCode中按CtrlShiftP打开命令面板。输入“Remote-WSL: New WSL Window”并选择。这将打开一个新的VSCode窗口标题栏会显示“WSL: Ubuntu”。此时VSCode的所有操作终端、插件都将在WSL2环境中运行。步骤4配置VSCode项目与编译环境在WSL2的家目录下创建一个示例项目并配置VSCode的构建任务。创建项目结构在VSCode的WSL终端中执行mkdir -p ~/embedded_hello_world/src cd ~/embedded_hello_world编写一个简单的C程序在src目录下创建main.c。// src/main.c #include stdio.h int main() { printf(Hello, ARM World from WSL2!); return 0; }创建Makefile在项目根目录创建Makefile定义交叉编译规则。# Makefile # 参考来源 CC aarch64-linux-gnu-gcc TARGET hello_arm SRCS src/main.c OBJS $(SRCS:.c.o) CFLAGS -Wall -O2 all: $(TARGET) $(TARGET): $(OBJS) $(CC) $(CFLAGS) -o $ $^ %.o: %.c $(CC) $(CFLAGS) -c $ -o $ clean: rm -f $(TARGET) $(OBJS) .PHONY: all clean配置VSCode构建任务按CtrlShiftP输入“Tasks: Configure Task”选择“Create tasks.json file from template” - “Others”。编辑生成的.vscode/tasks.json文件。{ version: 2.0.0, tasks: [ { label: 交叉编译 ARM 程序, type: shell, command: make, // 调用我们写的Makefile args: [], group: { kind: build, isDefault: true }, problemMatcher: [], detail: 使用 aarch64-linux-gnu-gcc 编译项目 }, { label: 清理编译输出, type: shell, command: make, args: [clean] } ] }现在按CtrlShiftB即可执行交叉编译生成可在ARM64开发板上运行的hello_arm程序。步骤5进阶配置 - 集成CMake与调试对于更复杂的项目推荐使用CMake。安装CMake和CMake Tools扩展在WSL2终端中安装CMake并在VSCode中安装“CMake Tools”扩展。sudo apt install -y cmake创建CMakeLists.txt# CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(HelloARM C) # 设置交叉编译工具链 set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE_CXX_COMPILER aarch64-linux-gnu-g) # 设置目标系统类型 set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR aarch64) add_executable(${PROJECT_NAME} src/main.c)配置VSCode的CMake Tools按CtrlShiftP输入“CMake: Configure”选择“GCC for aarch64-linux-gnu ...”作为工具链。然后即可使用底部的CMake状态栏按钮进行配置、构建和调试。配置远程调试可选若需要在开发板上调试需安装GDB服务器gdbserver到板子并在VSCode中配置launch.json使用gdb-multiarch进行远程连接。这需要安装gdb-multiarchsudo apt install -y gdb-multiarch并在.vscode/launch.json中配置调试目标为开发板的IP和端口。三、完整工作流示例编译并传输到开发板假设你的RK3562开发板IP为192.168.1.100用户名为root。编译在VSCode中按CtrlShiftB项目根目录下会生成hello_arm可执行文件。传输到开发板使用scp命令通过SSH传输。# 在VSCode的WSL终端中执行 scp hello_arm root192.168.1.100:/tmp/在开发板上运行# 通过SSH登录开发板 ssh root192.168.1.100 # 在开发板的终端中执行 cd /tmp chmod x hello_arm ./hello_arm输出Hello, ARM World from WSL2!四、常见问题与优化技巧WSL2网络访问WSL2与Windows共享IP从Windows可直连WSL2服务。若需从WSL2访问Windows上的服务如TFTP服务器可使用hostname -I获取Windows的IP通常是172.x.x.x。文件系统性能避免在/mnt/c/等Windows挂载路径下进行大量I/O操作如编译这会显著降低速度。应将项目文件放在WSL2的原生Linux文件系统内如~/或/home/下。工具链版本管理对于不同项目可能需要不同版本的工具链可以使用update-alternatives进行管理或直接使用SDK中的工具链路径。集成OpenOCD进行烧录对于STM32等MCU开发可以在WSL2中安装openocd并配合VSCode的Cortex-Debug扩展进行片上调试和烧录。总结WSL2 VSCode 交叉编译工具链的方案通过将Linux编译环境深度集成到Windows中极大地优化了嵌入式开发的体验。它解决了传统虚拟机性能低下和切换繁琐的痛点提供了近乎原生的编译速度和无缝的编辑、构建、调试工作流。从基础的Makefile项目到复杂的CMake工程该方案都能提供良好的支持是现代嵌入式Linux和ARM应用开发的强力组合。参考来源【超全面】Linux嵌入式干货学习系列教程windows下使用wslVscode交叉编译linux-arm程序告别虚拟机WSL2 VSCode 如何重塑嵌入式开发的效率边界Win10下利用wslubuntu进行Linux开发在WSL中使用Vscode进行Stm32开发调试 (WSLVscodestm32CubeMXCmakeopenocd)linux笔记(2):vscode插件remote WSL远程使用交叉编译工具链(全志D1-H)