0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

针对嵌入式处理器的可配置LLDB底层调试器解析

Codasip 科达希普 来源: Codasip 科达希普 2023-10-16 14:58 次阅读

针对(且不限于)嵌入式处理器的可配置LLDB底层调试器

一般来说,软件开发人员或处理器开发人员有时需要检查和调试代码。代码调试可以在不同层次上进行,例如查看波形或解析打印输出,但首选是在交互会话中检查代码。调试器通过接受开发人员的命令、执行命令并显示结果来促进交互会话。例如,在代码的某一行停止时显示变量值。这次我们可以重点关注下 LLDB(底层调试器),它是在 LLVM 项目下开发的调试器。

调试器和定制

调试器通常支持多种目标,如 x86、ArmRISC-V。它们拥有这些目标的嵌入式知识(也称为 ABI),例如程序员可以看到哪些寄存器、目标有哪些指令或内存映射如何?然而,RISC-V 的诞生带来了一个新的维度。RISC-V 支持并认可自定义扩展,这意味着处理器可能拥有更多开发人员感兴趣的指令和/或寄存器,但标准 RISC-V 目标机并不知晓这些指令和/或寄存器。

对于这些问题,Codasip给出了解决方案,这些解决方案不仅适用于 RISC-V 架构,还适用于使用 Codasip Studio 工具描述的几乎所有架构(即定制处理器)。

LLDB及其架构

LLDB是 LLVM 项目下的下一代调试器,可重用 LLVM 编译器中的大量代码,如表达式评估。它包含所有标准功能:

断点、观察点

程序流程控制(步入/步出/步进、继续、中断)

变量

寄存器

内存

LLDB 结构设计精良,模块化程度高。而模块化的意义在于它为扩展做好了准备且可以利用插件架构。

LLDB插件

独立的插件可处理以下功能:

指令反汇编

在不同平台上启动可执行文件

支持各种可执行文件和调试格式或支持的高级语言,如 C 或 C++

每种插件类型都有一个预定义的API,插件必须实现该API。除插件外,LLDB还有一个核心主体,可利用插件并保存有关支持的架构/目标及其特性的信息。然后目标将插件和ABI连接起来。例如RISC-V 目标机知道ELF 是默认的可执行文件格式,以及RISC-V 架构可能是32位或64 位,有 32 个寄存器等信息。

虽然LLDB在起点(baseline)中是灵活的,但要最大限度地利用定制计算,就必须对其进行增强。

Codasip如何实现对LLDB的增强?

对此我们使用插件增强LLDB,以添加对以下功能的支持:

作为平台的Codasip仿真器、RTL仿真器或JTAG

在Codasip仿真器或FPGA/ASIC上运行的进程

可配置的ABI,且不仅仅适用于RISC-V处理器

可配置的反汇编器

CodAL语言(见下文)

除此以外我们还增强了LLDB内核,支持双栈架构、哈佛架构和16位架构,以及其他许多大大小小的全方位改进。

但是对于定制计算来说还需要更进一步。如上所述,设计人员可能会添加新指令或新寄存器。在这种情况下LLDB插件系统是不够的。当然,Codasip Studio可以为插件生成代码,但这么操作编译时间会非常长。

当然没有任何一个项目希望看到以上的不利情况。每个人都希望在开发处理器时能在几秒到几分钟的时间内快速周转,而不是更长。

添加配置功能

因此Codasip通过增加一个新的配置级别。该配置级别允许添加(或删除)新的寄存器、指令或内存映射,而无需重新编译插件。配置本身由处理器模型自动生成,并在LLDB启动时自动传递。然后LLDB 会加载配置文件并更新加载的插件。这样,我们就能从内置插件和处理器定制中获益,而且一切都在几秒钟内完成。

下面的示例显示了 LLDB 的命令行界面。

99fe87f8-699c-11ee-939d-92fbcf53809c.png

使用机器接口Python,LLDB也可以集成到集成开发环境中。

9a1a3b24-699c-11ee-939d-92fbcf53809c.png

那么处理器将如何调试?

到目前为止,我们已经讨论了软件和 C/C++ 调试。但是处理器设计也需要调试。Codasip Studio提供的不仅仅是标准的波形调试。我们还增强了 LLDB对CodAL语言的支持。这项功能允许直接在CodAL中调试处理器,而无需在RTL中检查波形。换句话说,LLDB可以在CodAL级别完成所有标准调试工作,如访问CodAL变量、步进或设置断点等。设计人员可以轻松地从C/C++通过汇编转到CodAL代码。下图显示了这种情况。

同时LLDB还包括其他优秀功能。其中一个值得一提的功能是使用Python 编写脚本。这可以无缝、顺利地集成到CI/CD或其他自动化框架中。它支持Windows、Linux或MacOS等主流平台(Codasip Studio同时也支持所有平台)。LLDB可以使用机器接口协议或Python集成到大多数集成开发环境(如 VS Code、Eclipse 等)中。此外,Codasip还为那些从GDB转向LLDB的用户提供了一个不错的命令图。如果您对该话题感兴趣,随时欢迎加入LLDB社区和Codasip,探索更多LLDB功能和特性!

关于Codasip

Codasip作为领先的处理器解决方案供应商,支持系统级芯片(SoC)开发人员设计出差异化的产品,从而获得竞争优势。客户可使用Codasip Studio设计自动化工具, 开放的架构许可以及可定制的RISC-V处理器IP系列,通过定制计算,充分解锁RISC-V的无限潜力。Codasip总部位于欧洲,同时服务于全球市场,目前已实现在数十亿颗芯片中布局。

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 处理器
    +关注

    关注

    67

    文章

    16742

    浏览量

    219957
  • arm
    arm
    +关注

    关注

    131

    文章

    8103

    浏览量

    359002
  • 嵌入式
    +关注

    关注

    4818

    文章

    17398

    浏览量

    278610
  • 调试器
    +关注

    关注

    1

    文章

    244

    浏览量

    23207
收藏 人收藏

    评论

    相关推荐

    如何利用SoPC设计通用在线调试器

    嵌入式处理器接口,给出支持统一调试接口的IP core架构,那么我们该如何利用SoPC设计通用在线调试器呢?
    发表于 08-01 07:44

    如何调试嵌入式代码?

    调试器嵌入式开发调试过程中扮演了怎样的角色呢?目标芯片内部是如何处理Debug and Trace 信号的?我们如何借助VS Code Cortex-Debug 或IDE 实现可视化
    发表于 12-17 06:32

    基于嵌入式调试器的网络通信方法设计与实现

    嵌入式调试器中如何通过以太网口进行嵌入式软件调试,实现了主机与开发板之间的网口通信。针对具体的嵌入式开发板S3C4510B 对网口驱动和网络协议进行了研究,裁
    发表于 05-27 12:53 9次下载

    嵌入式系统软件开发环境中调试器的设计

    调试在软件开发流程中是一个比较重要的环节,调试器是衡量一个软件开发环境优劣的重要因素.本文对嵌入式系统软件开发环境、软件调试调试器设计所遵循的基本原理以及
    发表于 05-30 13:51 29次下载

    基于DCC和JTAG的ARM硬件仿真调试器的研究与实现

    嵌入式系统开发是当今计算机软件发展的一个热点。嵌入式系统调试器是进行嵌入式开发的关键工具,常用于对嵌入式软件的调试和测试。嵌入式系统调试器由交叉调试器调试
    发表于 10-27 16:27 56次下载

    嵌入式处理器在片调试功能的设计

    处理器为研究对象,探讨了嵌入式处理器中在片调试功能的设计实现方法。大大方便了软件开发与系统
    发表于 06-29 17:45 48次下载
    <b>嵌入式</b><b>处理器</b>在片<b>调试</b>功能的设计

    嵌入式处理器

    嵌入式处理器嵌入式系统的核心,是控制、辅助系统运行的硬件单元。范围极其广阔,从最初的4位处理器,目前仍在大规模应用的8位单片机,到最新的受到广泛青睐的32位,64位嵌入式CPU。   自
    发表于 10-20 17:21 1次下载
    <b>嵌入式</b><b>处理器</b>

    调试嵌入式处理器的几种常用方法

    调试嵌入式处理器的几种常用方法 前言 在任何产品
    发表于 03-11 12:25 1372次阅读
    <b>调试</b><b>嵌入式</b><b>处理器</b>的几种常用方法

    一个针对FPGA的完全可配置嵌入式32位RISC处理器

    针对FPGA的完全可配置嵌入式32位RISC处理器 使用
    发表于 11-03 08:59 620次阅读
    一个<b>针对</b>FPGA的完全<b>可配置</b><b>嵌入式</b>32位RISC<b>处理器</b>

    基于可配置处理器嵌入式系统ESL设计需求

    可配置处理器嵌入式系统ESL设计需求 近年来,越来越多的
    发表于 01-14 09:41 681次阅读

    基于SoPC的通用在线调试器设计

    调试器可以对部分嵌入式芯片进行仿真调试。但从本质上,这些仿真调试器无法对所有带在线调试功能的嵌入式芯片进行仿真调试。BDI2000和TRACE32等仿真可以在不改变硬件条件下,通过下载针对特定
    发表于 01-16 11:02 689次阅读
    基于SoPC的通用在线<b>调试器</b>设计

    基于SOPC的M8051嵌入式调试器设计

    嵌入式系统开发过程中,上位机通过调试器完成对目标机软件的开发、下载、调试。早期的调试器与上位机之间通过串口或并口通信,存在速度慢、通用性差等缺陷。
    发表于 10-15 11:02 2116次阅读
    基于SOPC的M8051<b>嵌入式</b><b>调试器</b>设计

    32位ARM嵌入式处理器调试技术

    针对32位ARM处理器开发过程中调试技术的研究,分析了目前比较流行的基于JTAG的实时调试技术,介绍了正在发展的嵌入式调试标准,并展望期趋势。 关键词 :嵌入式 调试 处理器 JTAG
    发表于 12-04 14:58 224次阅读

    利用Xtensa可配置处理器加速嵌入式算法的性能和增强系统的灵活性

    可配置处理器允许嵌入式开发人员来定制适合目标算法的处理器,使得处理器和算法能够更好地匹配。设计人员可以增加专用的、可变宽度的寄存,专用的执行部件和更宽的数据总线以达到专用算法的最优处理器配置
    发表于 04-25 10:40 908次阅读
    利用Xtensa<b>可配置</b><b>处理器</b>加速<b>嵌入式</b>算法的性能和增强系统的灵活性