ARMv8-A MacOS调试环境搭建

文章目录

简介

本节主要介绍基于Visual Studio Code在MacOS下调试环境的搭建,Linux发行版上的过程也类型,它主要使用到以下工具链:

  • aarch64 架构的交叉编译器和gdb客户端
  • Visual Studio Code 和 C语言插件
  • qemu

安装

qemu

复制代码
brew install qemu

交叉编译工具链

学习ARMv8架构不同于编写Linux应用程序,过程中并不涉及使用glibc,可以使用不带glibc的版本,安装途径如下:

  • 使用 brew 安装 aarch64-elf-gcc 和 aarch64-elf-gdb

    复制代码
    brew install aarch64-elf-gcc aarch64-elf-gdb
  • 通过ARM官方网站下载 aarch64-none-elf,ARM官方只提供了aarch64-none-elf 的 MacOS 版本,Linux 发行版可以选择 aarch64-none-linux-gnu。

  • 使用其他版本的工具链,例如 zephyr 的 sdk 中已经包含了aarch64架构的交叉编译器,这些编译器也可以用。

C语言插件

在VSCode中直接搜索C相关的插件,这些插件包含了C语言语法解析以及调试支持:

gdb调试

测试代码

首先需要编写编写一段程序,并将其编译成elf文件,最后使用qemu运行该程序,此处的示例使用笨叔的ARMv8练手程序,需要根据自己所使用的编译器版本修改编译器前缀,例如我所使用的编译器需要将前缀改为aarch64-elf-,除此之外还需要修改qemu所使用的目标机,新版本的 qemu 的目标名称从 raspi4 变成了 raspi4b:

c 复制代码
ARMGNU ?= aarch64-elf-

board ?= rpi4

ifeq ($(board), rpi3)
COPS += -DCONFIG_BOARD_PI3B
QEMU_FLAGS  += -machine raspi3b
else ifeq ($(board), rpi4)
COPS += -DCONFIG_BOARD_PI4B
QEMU_FLAGS  += -machine raspi4b
endif

修改完成之后先执行 make 编译出可执行程序,然后再执行make debug,等待gdb客户端连接。

添加调试配置

在VSCode上如果需要使用gdb进行调试,需要添加调试配置,具体可以参考微软官方说明

json 复制代码
{
    // 使用 IntelliSense 了解相关属性。 
    // 悬停以查看现有属性的描述。
    // 欲了解更多信息,请访问: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "armv8-launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "xxx.elf",
            "args": [],
            "stopAtEntry": true,
            "cwd": "${workspaceRoot}",
            "environment": [],
            "externalConsole": true,
            "MIMode": "gdb",
            "miDebuggerPath": "aarch64-elf-gdb",
            "miDebuggerServerAddress": "localhost:1234"
        }
    ]
}

添加完成后会在左侧debug菜单下显示新增的调试选项,点击该选项即可连接到qemu到gdb服务器中。

当我们想使用JLink调试树莓派或者其他芯片时,可以使用JLink提供的JLinkGDBServer 连接树莓派,然后再通过修改 VSCode 的配置连接到 JLinkGDBServer 提供的端口,即可进行调试。

如果有使用过JLinkGDBServer 调试单片机的经历,一定会觉得这个过程很熟悉,单片机开发主要基于芯片本身进行,运行的程序本身并不支持完整的gdb服务,大部分时候都需要通过调试器对硬件进行调试。

不同于Linux应用调试,Linux应用程序可以通过在树莓派安装一个gdbserver对应用程序进行调试,所有的功能由Linux系统提供,而在ARMv8架构学习过程中,编写的代码相当于是一段裸机程序,它并没有Linux系统的支持,一旦出现故障需要进行排查时,使用调试器是一个非常高效的调试方式。

相关推荐
PersistJiao15 分钟前
针对 Intel Mac 的硬件限制提升faster-whisper字幕识别的方法
macos·whisper
振南的单片机世界1 小时前
地址总线定“找谁”,数据总线定“搬多少”
arm开发·stm32·单片机
起个破名想半天了1 小时前
Vmware安装MacOS虚拟机方法
macos·vmware·unlocker
新手村领路人17 小时前
在macos python中安装dlib
开发语言·python·macos
有想法的py工程师1 天前
手工处理 Oracle Cloud ARM 实例在线 DD Rocky Linux 10报错
linux·arm开发·oracle
万粉变现经纪人1 天前
2026最新Windows11系统CMD安装Claude Code 快速接入DeepSeek V4 Pro在VSCode编程工具中使用保姆级入门教程指南
linux·运维·ide·windows·vscode·macos·编辑器
少威shaowei1 天前
在 Mac 上搭建 DNS 服务器
运维·服务器·macos
带土11 天前
2. ARM处理器概论
arm开发
m0_535817551 天前
Mac下Claude Code完整配置指南:API中转+环境变量设置一步到位
gpt·macos·node.js·api·claude·claudecode·88api
鸠摩智首席音效师1 天前
如何在 macOS 上安装 .NET Core ?
macos·.netcore