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

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

3天内不再提示

如何使用静态呼叫流浏览器更快地对嵌入式设备软件进行故障排除

星星科技指导员 来源:嵌入式计算设计 作者:Hari Nagalla 2022-11-21 14:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

由于具有射频连接和微控制器内核的低成本集成片上系统设备的进步,物联网IoT) 设备呈指数级增长。

其中许多设备主要基于Arm® Cortex-M®架构。随着硬件的进步,嵌入式软件在跟上新的连接协议、协议栈和框架方面发挥着重要作用。

然而,连接设备的激增给嵌入式软件工程师带来了挑战,尤其是同时在多个设备和框架上工作的应用程序和维护工程师。

了解新设备软件、框架和协议栈的工作原理可能非常耗时,并且会限制工程师快速解决问题的能力。设计文档和内联源代码注释可能会有所帮助,但它们可能不容易访问,并且可能无法全面了解代码的工作原理。

在这些情况下,工程师依靠他们的独创性、足智多谋和使用集成开发环境 (IDE) 的源代码浏览。虽然这在尝试理解软件代码流时有所帮助,但这是一个耗时且乏味的过程,并且有更好的方法。

在本文中,我将介绍一种使用现有工具链实用程序来生成软件的静态函数调用层次结构并更快更好地理解软件流的新方法。

函数调用跟踪的常见类型

可以使用函数调用跟踪来了解代码流或识别 bug。比较成功和失败方案之间的程序流(通过函数调用跟踪)可以帮助您快速识别代码中存在问题的区域,以便进一步检查。

函数调用跟踪补充了基于 IDE 的源代码浏览,以更好地了解整个软件实现,并且可以分为两个常见类别:

运行时函数调用跟踪。这是一个侵入性的过程,需要检测源代码。像 GNU Compiler Collection 这样的工具链提供了放置函数调用的检测,这需要重建代码来重新生成新的二进制文件,但会导致额外的代码大小和更长的执行时间。对于缺少内存的资源受限的 IoT 设备,运行时函数调用跟踪可能不是一个可行的选择。此外,您无法保证检测的代码的行为与未检测的代码相同。

静态函数调用。对于基于只读存储器 (ROM) 的设备,检测不是一个可行的选择。尽管您可以简单地使用 Eclipse 或 Source Insight 等 IDE 浏览源代码以了解软件实现,但这是一个繁琐的过程。一些 IDE(通常是昂贵的商业版本)可以派生静态函数调用图。这些静态函数调用浏览器通常范围有限,如果源代码中有条件编译,则可能无法提供整个调用流的准确图片。

但是,可以从二进制可执行和可链接格式 (ELF) 文件生成静态调用流浏览器,该文件反映了实际的二进制代码。

使用静态呼叫流浏览器更快地修复软件

让我们使用设备的 ELF 二进制映像来生成函数调用引用详细信息。如图 1 所示,其思路是获取 ELF 二进制文件,并通过各种代码生成工具(如 TI 的目标文件显示 (armofd) 和拆装器 (armdis) )传递它,以生成函数列表和调用引用数据库。生成数据库后,在简单的树浏览器中显示调用层次结构和流,以查看函数调用引用。这些静态调用流图还可以通过将运行时 ROM 代码消息日志覆盖在静态函数树的顶部来帮助调试 - 这种组合将提供对运行时代码流的洞察并帮助您隔离问题。

pYYBAGN7GmKAR_u_AAFtC8PlGFA735.png

图 1:ELF 文件格式

二进制文件 (ELF) 分析

该ELF文件包含一个程序头,节头,以及代码和数据节。工具链提供了各种工具来检查和以可读格式显示 ELF 二进制文件内容。在 TI,我们使用 armofd 和 armdis 等实用程序名称来获取 Arm 反汇编中的功能详细信息和完整的程序编码。

pYYBAGN7GmqALZYUAADzD0d8ZGg045.png

图2:静态函数分析的过程

解析引擎遍历反汇编代码,并通过带链接的分支 (BL) 和带链接和交换的分支 (BLX) 指令检查函数调用,查找每个函数的所有调用函数,并填充函数数据库。数据库本身被安排为Adelson-Velsky和Landis自平衡搜索树,以便快速搜索和浏览。

编译器优化可能会通过直接分支到被调用的函数来扭曲某些函数调用。这些函数没有任何堆栈分配,因此解析引擎需要足够智能才能检测这些编译器优化。

函数浏览器

称为 Java 帧 (JFrames) 的简单图形用户界面 (GUI) 界面为函数调用浏览选择感兴趣的函数。选择一个函数将显示两个帧,一个用于“被调用方/被调用函数”,另一个用于“被调用自”函数。这些帧显示具有进一步节点扩展的分层树结构,如图 3、4、5 和 6 所示。

浏览器图形用户界面

函数列表显示所有可用函数,使您能够选择感兴趣的函数来浏览参考文献。

pYYBAGN7GnGAFEtaAAGDeVrYZL4756.png

图 3:功能列表显示

可以在树中进一步向下导航以查看函数调用的可能性。

pYYBAGN7GnmAbdZbAAGZpw-V-lU508.png

图 4:调用的函数引用

poYBAGN7GoOAOxy6AACo9zMJYR0595.png

图 5:从引用调用

poYBAGN7GoqAaUSlAAIveYQZPpM392.png

图 6:功能列表 GUI

简化软件

通过使用此方法从二进制映像派生静态调用流程图,您现在可以更好地了解软件功能流,并补充源代码浏览,以更深入地了解软件实现。最重要的是,这种方法可以加快流程并使故障排除软件更简单。

审核编辑:郭婷

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

    关注

    49

    文章

    8862

    浏览量

    165660
  • 嵌入式
    +关注

    关注

    5209

    文章

    20645

    浏览量

    336926
  • 物联网
    +关注

    关注

    2950

    文章

    48121

    浏览量

    418280
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    嵌入式驱动开发,需要掌握哪些技能?

    。 4、 熟悉驱动开发常用工具做驱动开发,会牵涉到很多软硬件工具。比如:VS Code、Keil、 J-Link、Git等。 5、 调试和故障排除嵌入式软件的测试和调试非常重要
    发表于 01-20 16:46

    什么是嵌入式应用开发?

    包括ARM7、ARM9、ARM11、PowerPC、MIPS等。这些处理和编程语言的选择取决于具体的硬件条件和开发需求‌。 综上所述,嵌入式应用开发是一个综合性的技术领域,涉及硬件和软件的紧密结合,广泛应用于各种
    发表于 01-12 16:13

    嵌入式软件测试找bug的常见方法和秘诀

    的领域使用软件和微处理控制各种嵌入式设备,对日益复杂的嵌入式软件
    发表于 01-12 07:07

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!

    无需安装!在浏览器里就能玩转ESP32/ESP8266,这个神器绝了!【往期精选】十年嵌入式最深的痛,不是Bug,而是抓不到日志!vivo宣布原生支持HomeAssistant生态设备接入(含
    的头像 发表于 01-10 10:01 1376次阅读
    无需安装!在<b class='flag-5'>浏览器</b>里就能玩转ESP32/ESP8266,这个神器绝了!

    arm嵌入式主板优缺点

    设备里面做控制、数据处理使用的CPU板。一般作为工控主板使用。   ARM处理是一种16/32位的嵌入式RISC微处理,具有低成本、高性能、低功耗的特点。ARM9系列微处理器具有
    发表于 01-08 07:08

    CW32嵌入式软件开发的必备知识

    。 能够进行操作系统的任务设计、任务管理等,以满足特定应用的需求。 5 、硬件接口与外设 熟悉常用的硬件接口,如GPIO、串口、SPI、I2C等,并能编写相应的驱动程序。 了解嵌入式系统常用的硬件设备
    发表于 11-28 07:48

    在以下嵌入式软件设计模型中,属于数据模型的是,哪里有设计模型的介绍?

    在以下嵌入式软件设计模型中,属于数据模型的是()。A. CCSB. CSPC. FSMD. Petri Net
    发表于 11-24 15:55

    嵌入式开发的关键点介绍

    设备和移动设备。因此,嵌入式开发需要考虑系统的功耗,并编写节能的代码以延长系统的使用寿命。 4. 软件集成: 嵌入式系统通常需要与其他
    发表于 11-13 08:12

    嵌入式软件测试与专业测试工具的必要性深度解析

    故障,最终召回成本高达数百万欧元。主流测试工具与技术方案嵌入式软件测试工具市场提供了多样化的解决方案,满足不同测试需求:功能测试工具 ‌ETest Studio‌:国产化黑盒测试工具,提供测试
    发表于 09-28 17:42

    嵌入式达到什么水平才能就业?

    :包括GPIO、定时、中断、ADC 等外设的配置与调试,能实现如温湿度采集、电机控制等功能掌握嵌入式 Linux 驱动开发基础:能编写简单字符设备驱动,实现设备的初始化、读写操作,会
    发表于 09-15 10:20

    新一代嵌入式开发平台 AMD嵌入式软件和工具2025.1版现已推出

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。 2025.1 版嵌入式软件
    的头像 发表于 08-20 09:15 4203次阅读

    AMD 2025.1版嵌入式软件和工具的新增功能

    AMD 2025.1 版嵌入式软件和工具是面向新一代嵌入式系统开发而打造的综合平台,全面加速概念构想到部署落地。
    的头像 发表于 08-15 15:32 1427次阅读

    入行嵌入式应该怎么准备?

    常会遇到各种问题和错误。因此,具备良好的调试和故障排除能力是非常重要的。需要学会使用调试工具和设备,如示波器、逻辑分析仪和仿真,以便于分析和解决问题。 六、领域知识
    发表于 08-06 10:34

    老电视如何安装浏览器

    2017年购买的夏普老电视,1.5G+8G存储,网上下的浏览器APK文件在电视内打开就弹出“解析程序包出现问题”。 未知来源选项已打开,存储空间清空到只剩下三个应用(只占用300M左右),基本可
    发表于 06-01 18:57

    嵌入式软件行业增长驱动因素

    嵌入式软件在物联网应用中至关重要,因为它管理设备操作、控制传感、支持连接并确保数据安全。例如,在智能家居中,恒温、安全摄像头和灯光等
    的头像 发表于 05-09 11:26 932次阅读