从 Windows 主机交叉编译/远程调试 Raspberry 的工具集
概述了在 Windows (10) 主机上为 Raspberry PI 3B 交叉编译/构建/远程调试 C/C++ 项目所需的工具。
引言
单行描述解释了大部分内容:我有一个 Raspberry PI 3B,我一直想为它构建一些 C/C++ 项目。奇怪的是,要从 Windows (10) 主机上进行交叉编译/构建,以及从主计算机进行远程调试,非常难以找到相关信息。有很多信息,但没有关于如何设置一切以在远程 Raspberry 目标上从 Windows 主机构建一个示例“Hello world
”的总结。我认为主要原因是“C/C++”在 Raspberry PI 上不是很流行,Python 似乎更受欢迎。
由于我已经能够组装所有必要的东西来完成这个任务,所以我决定自己做一个总结。我的 Raspberry PI 运行的是 Raspbian Linux 发行版,所以这可能是一个关于如何在其他运行各种 Linux 发行版的开发板上进行设置的不错示例。
背景
在过去的几年里,我使用 Eclipse 和各种 gcc/g++ 开发工具链在多个平台(裸机/FreeRTOS/Linux,各种处理器:ARMcortex M0+...双核 ARM9,ESP32,Power5 等)上进行了大量的软件交叉开发,因此我对这些东西的工作原理有基本的了解。
然后,我最近从 Eclipse/ESP32 工具链组合转向了 Visual Studio Code/ESP32 工具链,事实证明它比 Eclipse/ESP32 工具链更容易设置。当时,我有一些 ESP32 硬件,所以我可以在 Windows (10)、Linux 和 OSX 主机上测试该设置,并且它在所有平台上都能正常工作。
现在我只有一台 Window 10 主机和一台运行 Raspbian 的 RaspBerry PI3B 作为目标,我已经尝试并设法从我的 Windows 10 主机上成功实现了这一点,但总的来说,它应该是相当平台独立的,因为很多脚本依赖于需要为不同平台进行稍微不同的设置的环境变量,但它们对于所有可能的平台都是通用的,特别是因为我在 Windows 机器上使用了 Mingw32 shell。
Using the Code
ZIP 文件包含整个项目,并且只包含很少的文件。随意放在任何你喜欢的地方。注意:解压后,你会发现 `main` 子目录下面还有一个名为 `test` 的子目录,以及一个名为 `test.c` 的文件,后两者可以忽略,因为它们只是用来测试子目录中的文件是否也能构建;它们是可以构建的。
要构建项目,需要先安装各种工具,所以这里列出了需要安装的工具:
MSYS2
这提供了类似 Linux 的终端 Shell 操作。通常,它会安装在目录 `C:\msys32` 中。
在该目录中运行 `Mingw32.exe` 来启动一个 Shell。安装地址可以在 https://www.msys2.org/ 找到。
arm-linux-gnueabihf 工具链
这是为 Raspberry PI 构建 C/C++ 项目所需的工具链。如果你想为最新的(截至撰写本文时)Raspbian 的 "full stretch" 版本构建,你需要它的 6.0.3 版本。你可以在 Linux、OSX 和 Windows 上找到预编译的版本。我使用的版本可以在这里找到:http://gnutoolchains.com/raspberry/。我将其安装在了这里:`C:\msys32\home\RPI\SysGCC`。
安装完成后,在 `C:\msys32\etc\profile.d` 目录下添加一个名为 `RPI-gcc_toolchain.sh` 的脚本文件。内容应该如下所示:
export PATH="$PATH:/c/msys32/home/RPI/SysGCC/bin"
export RPI_IP="192.168.0.144"
export RPI_USER="pi"
export RPI_PASSWORD="my_Pi_password"
当然,IP 地址取决于你的本地路由器提供的地址,将其设置为始终为 RPI 的 MAC 地址提供相同的 IP 地址绝对是个好主意。完成后,每次运行 `mingw32` Shell 时,都会定义扩展的 PATH
数据和额外的**环境变量**。
附加环境变量
为了启用 VSCODE 和示例项目中的 makefile 使用的一些功能,请在你的 Windows 设置中添加环境变量 `RPIDEV_LOC`,并将其设置为 `c:/msys32/home/RPI/SysGCC`(通过控制面板 -> 系统 -> 高级设置 -> 环境变量)。
命令行构建测试
完成以上步骤后,你应该能够测试构建项目了。
- 启动一个 `mingw32` Shell,然后导航到示例项目的**根**目录。
- 输入 `make` 来开始交叉编译/构建,你应该会看到它在构建 `hello_world_main.c` 和 `test.c` 文件。
- 如果一切顺利,最后一步将生成 `Hello_world_c` 文件,这是一个可以在 Raspberry PI 上运行的 ELF 文件。如果它正常工作,我们就可以开始使用 Visual Studio Code 了。
安装 Visual Studio Code 和扩展
对于还没有 Visual Studio Code 的用户,你需要安装各种项目:
- Visual Studio Code 本身,可以在 https://vscode.js.cn/ 找到。
- Microsoft 的 **C/C++** 扩展,以获得 C/C++ 支持、智能感知等。
- **Native-Debug** 扩展,以获得跨平台 GDB 调试支持。
使用 Visual Studio Code 构建和调试示例代码
安装完 Visual Studio Code 和扩展后,你可以开始打开项目文件夹。在该文件夹中,有一个 `.vscode` 文件夹,其中包含了所有必要的 **JSON** 配置文件,它们提供了所有必需的构建工具等。按下 **Ctrl+Shift+B** 会弹出构建工具列表。
构建命令的数量不长,除了常规的清理、构建和快速构建工具外,最重要的工具是 **Transfer...** 工具,它将要执行的文件传输到 RPI,并在该设备上启动 GDBSERVER
。
实际调试是通过按下 **F5** 来启动的,它会尝试连接到 RPI 上最近启动的 GDBSERVER
。从那时起,你就可以进行完整的调试;设置断点、检查变量等,就像应用程序在你自己的主系统上运行一样。
好了,就是这样。我曾经在 GUI 出现之前的时代做了很多 CLI 开发工作。一些嵌入式 Linux 应用程序、一些 Windows 开发工作,以及大量的其他嵌入式工作,无论是否有某种形式的操作系统。我真的很喜欢做这个,因为它能把很多东西 neatly 地联系在一起。我只希望这对那些需要解决方案而无需亲自进行所有挖掘的人有所帮助。
历史
- 2019年3月22日:初始版本