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

简化软件

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

审核编辑:郭婷

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

    关注

    48

    文章

    8250

    浏览量

    162421
  • 嵌入式
    +关注

    关注

    5186

    文章

    20151

    浏览量

    328905
  • 物联网
    +关注

    关注

    2939

    文章

    47324

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

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

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

    故障,最终召回成本高达数百万欧元。主流测试工具与技术方案嵌入式软件测试工具市场提供了多样化的解决方案,满足不同测试需求:功能测试工具 ‌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 3632次阅读

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

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

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

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

    老电视如何安装浏览器

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

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

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

    嵌入式软件单元测试的必要性、核心方法及工具深度解析

    一、为什么嵌入式软件必须重视单元测试? ‌嵌入式系统的特殊性‌ 在汽车 ECU、医疗设备控制等场景中,
    的头像 发表于 03-21 14:53 962次阅读

    嵌入式软件测试技术深度研究报告

    嵌入式软件测试技术深度研究报告 ——基于winAMS的全生命周期质量保障体系构建 一、行业技术瓶颈与解决方案框架 2025年嵌入式软件测试领域面临两大核心矛盾: ‌ 安全合规与开发效率
    的头像 发表于 03-03 13:54 765次阅读

    嵌入式机器学习的应用特性与软件开发环境

    设备和智能传感)上,这些设备通常具有有限的计算能力、存储空间和功耗。本文将您介绍嵌入式机器学习的应用特性,以及常见的机器学习开发软件与开发
    的头像 发表于 01-25 17:05 1211次阅读
    <b class='flag-5'>嵌入式</b>机器学习的应用特性与<b class='flag-5'>软件</b>开发环境

    电机控制故障排除方法

    电机控制故障排除方法 1. 故障诊断前的准备 在进行故障
    的头像 发表于 01-22 09:25 3931次阅读

    E2000 Speedometer测试浏览器性能

    的东西更新到Chrome中,是经过Google进行了封闭、定制和优化的版本。 Chrome 浏览器浏览器基准测Speedometer中的得分和整体性能出色(如下图)。 (截图摘自:11款常用
    发表于 01-10 21:33

    Chrome浏览器优化Android性能,骁龙8至尊版表现突出

    谷歌近日对Chrome浏览器的最新版本进行了重大更新,特别针对Android设备进行了性能优化,特别是对于搭载骁龙8至尊版处理的旗舰
    的头像 发表于 12-13 14:44 1724次阅读

    嵌入式系统开发与硬件的关系 嵌入式系统开发常见问题解决

    嵌入式系统开发与硬件的关系 嵌入式系统是专为特定应用设计的计算机系统,它们通常嵌入在所控制的设备中。这些系统的关键特点是它们与硬件的紧密集成,这意味着
    的头像 发表于 12-09 09:38 1469次阅读