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 ?= rpi4ifeq ($(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.rhkb.cn/news/486516.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

qt基本部分控件用法(一)

前言: 以前 windows下做工具主要是MFC,趁有点空时间,研究了QT,感觉跟MFC 差不多,VS 比 QT CREATOR 还是强大,不过QT可以跨平台,功能更强大,MFC 只能在win平台下.; 1:环境…

【hacker送书第19期】自动化测试框架设计

文章目录 前言内容简介获取方式总结 前言 在当今这个高速发展的互联网时代,软件测试已成为保障软件质量的重要环节。而自动化测试更是测试领域中不可或缺的一环。这本书的出版,正是为了帮助我们更好地理解和应用自动化测试框架设计,提升软件…

【Git】:标签管理

目录 理解标签 创建标签 操作标签 理解标签 标签的作用 标记版本:标签 tag ,可以简单的理解为是对某次 commit 的⼀个标识,相当于起了⼀个别名。例如,在项目发布某个版本的时候,针对最后⼀次 commit 起⼀个 v1.0 这样…

[Maven]下载安装、使用与简介

很多框架的下载使用的流程和思路是差不多的,这里以maven做详细介绍。 下载安装与配置变量 下载 首先,我们要使用maven,必须先下载它的相关文件。想要下载,我们可以直接搜索maven。找到它的官网。这里不绕弯子,直接给出…

光猫开DMZ教程

本教程以移动光猫未例,具体操作以实际光猫为准 1、登录移动光猫管理后台 打开浏览器,在浏览器地址栏输入移动光猫登录管理地址192.168.1.1或者tplogin.cn 按“回车键”打开登录页面,然后输入路由器管理密码登录。 移动光猫登录页面 超级密…

高阶数据结构--B树B+树实现原理B树模拟实现--Java

目录 一、B-树概念 二、B-树插入分析 1.用序列{53, 139, 75, 49, 145, 36, 101}构建B树的过程如下: 2.插入过程总结 三、B树插入实现 四、B树 1.B树概念 2.B树的特性 五、B树应用 1.索引 2.Mysql索引 3.InnoDB 一、B-树概念 1970 年, R.Bayer 和…

tsx: tsx以及在表格的使用?

问&#xff1a; tsx文件render:(scope)>{ return ( <div onclick{handleCLick(scope.$index1)}> ) } const handleCllick (i)>{ alert(i) }为什么进入界面就执行了handleClick函数&#xff1f;我希望点击在执行 回答&#xff1a; 问&#xff1a; 我只希望给这一…

MySQL报错:Illegal mix of collations

背景 最近项目上MySQL库运行过程中遇到SQL执行报错&#xff1a;java.sql.SQLException: Illegal mix of collations (utf8mb4_general_ci,IMPLICIT) and (utf8mb4_0900_ai_ci,IMPLICIT) for operation ‘’ 分析 询问DBA后&#xff0c;被告知是关联查询的表排序规则不一致导致…

FaRM译文

No compromises: distributed transactions with consistency, availability, and performance Aleksandar Dragojevic, Dushyanth Narayanan, Edmund B. Nightingale, Matthew Renzelmann, Alex Shamis, Anirudh Badam, Miguel Castro Microsoft Research 目录 摘要 1. 引…

spark sql 环境安装,java 默认路径和 安装配置!

yum安装java 查看默认路径 update-alternatives --config java # Java 环境变量 export JAVA_HOME/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jreexport PATH$JAVA_HOME/bin:$PATH# Spark 环境变量 export SPARK_HOME/home/vagrant/soft/sparkexport PATH…

Keepalived配置文件中未指定MASTER节点会出现什么现象?

Keepalived配置文件中未指定MASTER节点会出现什么现象&#xff1f; 在 Keepalived 配置文件中&#xff0c;如果没有明确指定 MASTER 节点的配置&#xff0c;可能会导致 VRRP&#xff08;Virtual Router Redundancy Protocol&#xff09; 协议无法正常工作&#xff0c;具体表现如…

注塑机数据采集的3种方案优缺点对比海天注塑机采集震雄科霸科强数据采集注塑机数据采集网关注塑机联网

注塑机数据采集是工业自动化和智能制造中的一个重要环节&#xff0c;它可以帮助企业监控生产过程、优化生产效率、减少故障停机时间&#xff0c;并提高产品质量。你提到的三种采集模式各有特点和应用场景&#xff1a; IO采集&#xff1a; 这种模式主要通过采集注塑机的输入/输出…

TPAMI 2023:When Object Detection Meets Knowledge Distillation: A Survey

摘要 目标检测&#xff08;Object Detection&#xff0c;OD&#xff09;是计算机视觉中的一项关键任务&#xff0c;多年来涌现出了众多算法和模型。尽管当前 OD 模型的性能有所提升&#xff0c;但它们也变得更加复杂&#xff0c;由于参数规模庞大&#xff0c;在工业应用中并不…

QT数据库SQLite:QsqlTableModel使用总结

数据库连接、数据模型与界面组件所涉及的类之间的关系如下所示&#xff1a; 数据库类 QSqlDatabase 类用于建立与数据库的连接&#xff0c;QSqlDatabase 对象就表示这种连接。QSqlDatabase 类的功能主要分为三大部分&#xff1a; 1、创建数据库连接&#xff0c;即创建 QSqlDat…

川崎机器人维修|校原点方法详解

川崎机器人校原点方法的详细步骤及其原理阐述如下&#xff1a; 需要手动将机器人的六个轴精确地移动到0刻度位置。这一步骤至关重要&#xff0c;因为它涉及到机器人后续运动的基准设定。具体操作时&#xff0c;我们需在关节坐标系的指引下&#xff0c;按照6-5-4-1-2-3的顺序&a…

19. Three.js案例-创建一个带有纹理映射的旋转平面

19. Three.js案例-创建一个带有纹理映射的旋转平面 实现效果 知识点 WebGLRenderer (WebGL渲染器) WebGLRenderer 是 Three.js 中用于渲染场景的主要类。它利用 WebGL 技术在浏览器中绘制 3D 图形。 构造器 new THREE.WebGLRenderer(parameters)参数类型描述parametersobj…

【C语言】完成程序设计填空

文章目录 1、请阅读下面的程序,在空白处填写正确的代码,要求各在一行从头开始输出m和n的值。2、求100~599之间的所有水仙花数,即各位数字的立方和恰好等于该数本身的数。3、以下程序的功能是:将值为三位正整数的变量x中的数值按照个位、十位、百位的顺序 拆分并输出。请填空…

每天五分钟深度学习:神经网络的前向传播的计算(多样本)

本文重点 前面我们学习了单样本的前向传播,本文我们学习多样本的前向传播,我们先来回忆一下,神经网络的单样本的前向传播的向量化的方式: m个样本依次进行前向传播 这里我们说明一下符号: 我们使用(m)表示第m个样本,用[m]表示神经网络的第m层 a[2](i) 表示第i个样本计…

Flink自定义数据源

自定义数据源 [了解] SourceFunction:非并行数据源(并行度只能1) --接口 RichSourceFunction:多功能非并行数据源(并行度只能1) --类 ParallelSourceFunction:并行数据源(并行度能够>1) --接口 RichParallelSourceFunction:多功能并行数据源(并行度能够>1) --类 【建…

函数装饰器执行流程

往期回顾&#xff1a; 函数装饰器-CSDN博客 闭包函数的基础知识-CSDN博客 今天我们借助可视化pthon运行过程来理解下装饰器的执行过程。 在讲解之前我们先看一个普通函数的执行流程。 1. 普通函数的执行过程 看下面这段代码&#xff1a; 定义了一个全局变量 reg_list&am…