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

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

3天内不再提示

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

星星科技指导员 来源:嵌入式计算设计 作者:Hari Nagalla 2022-10-18 10:51 次阅读

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

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

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

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

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

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

函数调用跟踪的常见类型

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

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

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

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

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

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

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

pYYBAGNOFNuAcB-dAAFtsJWr3l4870.png

图1:ELF文件格式

二进制文件 (ELF) 分析

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

pYYBAGNOFOOAf7TXAADyhfGrNCU769.png

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

解析引擎遍历反汇编代码,并通过带有链接 (BL) 的分支和具有链接和交换 (BLX) 指令的分支检查函数调用,查找每个函数的所有调用函数,并填充函数数据库。数据库本身被安排为一个阿德尔森-维尔斯基和兰迪斯自平衡搜索树,用于快速搜索和浏览。

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

功能浏览器

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

浏览器界面

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

pYYBAGNOFOuAVmlmAAGDaAmpXFU894.png

图3:功能列表显示

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

poYBAGNOFPSAYrjpAAGaqnyBqoo130.png

图 4:调用的函数引用

pYYBAGNOFPyAAfg_AACo0cIBeYY569.png

图 5:从引用调用

pYYBAGNOFQKAD8yaAAIvtu3-T2o515.png

图 6:函数列表 GUI

简化软件

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

审核编辑:郭婷

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

    关注

    5064

    文章

    18994

    浏览量

    302601
  • 物联网
    +关注

    关注

    2902

    文章

    44179

    浏览量

    370738
收藏 人收藏

    评论

    相关推荐

    嵌入式设备浏览器内存管理有什么方法?

    嵌入式系统中,由于设备性能限制系统总的可分配内存相对较小,而在嵌入式平台上浏览器正常运行所需内存一般都比较大,并且内存分配和释放操作也比较频繁,例如,IPTV EPG界面上显示各类菜
    发表于 03-12 08:26

    怎么实现基于车载网络嵌入式浏览器的设计?

    怎么实现基于车载网络嵌入式浏览器的设计?
    发表于 05-14 06:35

    基于Linux的嵌入式浏览器的实现方法

    利于人们在日常生活中使用带有嵌入式浏览器功能的小型电子设备即时实现上网功能.而且Linux操作系统是开源的操作系统,使用C语言编写,具有良好的可移植性,所以嵌入式
    发表于 12-21 07:31

    基于LINUX的嵌入式浏览器的设计资料分享

    基于LINUX的嵌入式浏览器的设计与实现随着 Intemet普及率的迅猛增长,浏览器成为获取信息的标准工具,并且已经为广大 Intemet用户所接受。与浏览器相配合的各类
    发表于 12-21 07:38

    基于嵌入式Linux图片浏览器的设计与实现

    基于嵌入式Linux图片浏览器的设计与实现PAGEPAGEII本科学生毕业论文(设计)题目(中 文):基于嵌入式Linux图片浏览器的设计与实现(英文):The design
    发表于 12-21 06:27

    嵌入式浏览器Konqueror-E的实现

    Konqueror/embedded是针对嵌入式Linux的开放源码浏览器,也是符合GNU条款的自由软件。本文首先对该浏览器技术核心做了简要分析,然后详细介绍了Konqueror/em
    发表于 12-11 16:17 10次下载

    基于LINUX的嵌入式浏览器的设计与实现

    嵌入式浏览器可以广泛应用于各种信息电器和便携网络终端中,在工业控制领域也有着非常广阔的应用前景。本文提出了一种基于LINUX 的嵌入式浏览器
    发表于 01-07 14:50 28次下载

    嵌入式浏览器Konqueror的移植和汉化

    目前,嵌入式浏览器已经逐渐成为高端手机和PDA的标准置。Konqueror/embedded作为嵌入式Linux操作系统的首选浏览器得到了广泛使用。但是由于该
    发表于 02-05 08:23 15次下载

    基于LINUX的嵌入式浏览器的设计与实现

    基于LINUX的嵌入式浏览器的设计与实现 随着 Intemet普及率的迅猛增长,浏览器成为获取信息的标准工具,并且已经为广大 Intemet用户所接受。与浏览
    发表于 10-06 08:31 1044次阅读
    基于LINUX的<b class='flag-5'>嵌入式</b><b class='flag-5'>浏览器</b>的设计与实现

    一种WAP嵌入式浏览器的设计

    为解决传统浏览器可移植性差、效率比较低的问题,设计出一种基于WAP的嵌入式浏览器。与传统浏览器比较,该浏览器分为各个模块同时去掉一些没有用的
    发表于 09-29 15:55 1302次阅读
    一种WAP<b class='flag-5'>嵌入式</b><b class='flag-5'>浏览器</b>的设计

    嵌入式linux浏览器移植,嵌入式Linux WEB服务BOA的移植方法

    ,能够生成动态页面,在用户端只需要通过Web浏览器就可以对嵌入式设备进行管理和监控,非常方便实用。本节主要介绍这种应用的开发和移植工作。用户首先需要在
    发表于 11-01 16:57 10次下载
    <b class='flag-5'>嵌入式</b>linux<b class='flag-5'>浏览器</b>移植,<b class='flag-5'>嵌入式</b>Linux WEB服务<b class='flag-5'>器</b>BOA的移植方法

    如何使用静态呼叫浏览器进行软件故障排除

      通过使用这种方法从二进制图像中导出静态调用流程图,您现在可以更好地了解软件功能流程并补充您的源代码浏览,从而更深入地了解软件实现。最重要的是,这种方法可以加快流程并使
    的头像 发表于 06-21 09:55 931次阅读
    如何使用<b class='flag-5'>静态</b><b class='flag-5'>呼叫</b><b class='flag-5'>流</b><b class='flag-5'>浏览器</b><b class='flag-5'>进行</b><b class='flag-5'>软件</b><b class='flag-5'>故障</b><b class='flag-5'>排除</b>

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

    由于具有射频连接和微控制内核的低成本集成片上系统设备的进步,物联网 (IoT) 设备呈指数级增长。
    的头像 发表于 11-21 14:26 459次阅读
    如何使用<b class='flag-5'>静态</b><b class='flag-5'>呼叫</b><b class='flag-5'>流</b><b class='flag-5'>浏览器</b>更快地对<b class='flag-5'>嵌入式</b><b class='flag-5'>设备</b><b class='flag-5'>软件</b><b class='flag-5'>进行</b><b class='flag-5'>故障</b><b class='flag-5'>排除</b>

    嵌入式环境下浏览器的研究与设计

    电子发烧友网站提供《嵌入式环境下浏览器的研究与设计.pdf》资料免费下载
    发表于 10-24 10:38 0次下载
    <b class='flag-5'>嵌入式</b>环境下<b class='flag-5'>浏览器</b>的研究与设计

    基于WAP的嵌入式浏览器设计

    电子发烧友网站提供《基于WAP的嵌入式浏览器设计.pdf》资料免费下载
    发表于 10-24 11:33 0次下载
    基于WAP的<b class='flag-5'>嵌入式</b><b class='flag-5'>浏览器</b>设计