当前位置: 首页 > article >正文

ARMv8-A MacOS调试环境搭建

文章目录

  • 简介
  • 安装
    • qemu
    • 交叉编译工具链
    • C语言插件
  • gdb调试
    • 测试代码
    • 添加调试配置
  • JLink 调试树莓派

简介

本节主要介绍基于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:

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进行调试,需要添加调试配置,具体可以参考微软官方说明

{
    // 使用 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调试树莓派或者其他芯片时,可以使用JLink提供的JLinkGDBServer 连接树莓派,然后再通过修改 VSCode 的配置连接到 JLinkGDBServer 提供的端口,即可进行调试。

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

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


http://www.kler.cn/a/428193.html

相关文章:

  • Win11下帝国时代2无法启动解决方法
  • (一)QT的简介与环境配置WIN11
  • 使用 postman 测试思源笔记接口
  • Charles 4.6.7 浏览器网络调试指南:流量过滤与分析(六)
  • Edge-TTS在广电系统中的语音合成技术的创新应用
  • PostgreSQL 约束
  • Python毕业设计选题:基于大数据的淘宝电子产品数据分析的设计与实现-django+spark+spider
  • PyCharm文件、临时文件、目录、文件夹(Directory)、软件包(Package)的区别
  • Spring Boot配置文件敏感信息加密
  • 智创 AI 新视界 -- AI 与量子计算的未来融合前景(16 - 5)
  • python拆分Excel文件
  • docker安装ddns-go(外网连接局域网)
  • JVM 参数配置详细介绍
  • C++ Learning 函数重载•引用
  • PyTorch基本使用——张量的索引操作
  • opencv光流法推测物体的运动
  • Spring Boot日志:从Logger到@Slf4j的探秘
  • ChatGPT 最新推出的 Pro 订阅计划,具备哪些能力 ?
  • uniapp 微信小程序webview 和 h5数据通信
  • 【AWS re:Invent 2024】一文了解EKS新功能:Amazon EKS Auto Mode
  • Python实现BBS论坛自动签到【steamtools论坛】
  • Python 入门教程(2)搭建环境 | 2.4、VSCode配置Node.js运行环境
  • 如何利用DBeaver配置连接MongoDB和人大金仓数据库
  • django 实战(python 3.x/django 3/sqlite)
  • AI by Hand:手搓 AI 模型
  • git遇见冲突怎么解决?