0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何使用靜態(tài)呼叫流瀏覽器更快地對嵌入式設備軟件進行故障排除

星星科技指導員 ? 來源:嵌入式計算設計 ? 作者:Hari Nagalla ? 2022-11-21 14:26 ? 次閱讀

由于具有射頻連接和微控制器內核的低成本集成片上系統(tǒng)設備的進步,物聯(lián)網(wǎng)IoT) 設備呈指數(shù)級增長。

其中許多設備主要基于Arm? Cortex-M?架構。隨著硬件的進步,嵌入式軟件在跟上新的連接協(xié)議、協(xié)議棧和框架方面發(fā)揮著重要作用。

然而,連接設備的激增給嵌入式軟件工程師帶來了挑戰(zhàn),尤其是同時在多個設備和框架上工作的應用程序和維護工程師。

了解新設備軟件、框架和協(xié)議棧的工作原理可能非常耗時,并且會限制工程師快速解決問題的能力。設計文檔和內聯(lián)源代碼注釋可能會有所幫助,但它們可能不容易訪問,并且可能無法全面了解代碼的工作原理。

在這些情況下,工程師依靠他們的獨創(chuàng)性、足智多謀和使用集成開發(fā)環(huán)境 (IDE) 的源代碼瀏覽。雖然這在嘗試理解軟件代碼流時有所幫助,但這是一個耗時且乏味的過程,并且有更好的方法。

在本文中,我將介紹一種使用現(xiàn)有工具鏈實用程序來生成軟件的靜態(tài)函數(shù)調用層次結構并更快更好地理解軟件流的新方法。

函數(shù)調用跟蹤的常見類型

可以使用函數(shù)調用跟蹤來了解代碼流或識別 bug。比較成功和失敗方案之間的程序流(通過函數(shù)調用跟蹤)可以幫助您快速識別代碼中存在問題的區(qū)域,以便進一步檢查。

函數(shù)調用跟蹤補充了基于 IDE 的源代碼瀏覽,以更好地了解整個軟件實現(xiàn),并且可以分為兩個常見類別:

運行時函數(shù)調用跟蹤。這是一個侵入性的過程,需要檢測源代碼。像 GNU Compiler Collection 這樣的工具鏈提供了放置函數(shù)調用的檢測,這需要重建代碼來重新生成新的二進制文件,但會導致額外的代碼大小和更長的執(zhí)行時間。對于缺少內存的資源受限的 IoT 設備,運行時函數(shù)調用跟蹤可能不是一個可行的選擇。此外,您無法保證檢測的代碼的行為與未檢測的代碼相同。

靜態(tài)函數(shù)調用。對于基于只讀存儲器 (ROM) 的設備,檢測不是一個可行的選擇。盡管您可以簡單地使用 Eclipse 或 Source Insight 等 IDE 瀏覽源代碼以了解軟件實現(xiàn),但這是一個繁瑣的過程。一些 IDE(通常是昂貴的商業(yè)版本)可以派生靜態(tài)函數(shù)調用圖。這些靜態(tài)函數(shù)調用瀏覽器通常范圍有限,如果源代碼中有條件編譯,則可能無法提供整個調用流的準確圖片。

但是,可以從二進制可執(zhí)行和可鏈接格式 (ELF) 文件生成靜態(tài)調用流瀏覽器,該文件反映了實際的二進制代碼。

使用靜態(tài)呼叫流瀏覽器更快地修復軟件

讓我們使用設備的 ELF 二進制映像來生成函數(shù)調用引用詳細信息。如圖 1 所示,其思路是獲取 ELF 二進制文件,并通過各種代碼生成工具(如 TI 的目標文件顯示 (armofd) 和拆裝器 (armdis) )傳遞它,以生成函數(shù)列表和調用引用數(shù)據(jù)庫。生成數(shù)據(jù)庫后,在簡單的樹瀏覽器中顯示調用層次結構和流,以查看函數(shù)調用引用。這些靜態(tài)調用流圖還可以通過將運行時 ROM 代碼消息日志覆蓋在靜態(tài)函數(shù)樹的頂部來幫助調試 - 這種組合將提供對運行時代碼流的洞察并幫助您隔離問題。

pYYBAGN7GmKAR_u_AAFtC8PlGFA735.png

圖 1:ELF 文件格式

二進制文件 (ELF) 分析

該ELF文件包含一個程序頭,節(jié)頭,以及代碼和數(shù)據(jù)節(jié)。工具鏈提供了各種工具來檢查和以可讀格式顯示 ELF 二進制文件內容。在 TI,我們使用 armofd 和 armdis 等實用程序名稱來獲取 Arm 反匯編中的功能詳細信息和完整的程序編碼。

pYYBAGN7GmqALZYUAADzD0d8ZGg045.png

圖2:靜態(tài)函數(shù)分析的過程

解析引擎遍歷反匯編代碼,并通過帶鏈接的分支 (BL) 和帶鏈接和交換的分支 (BLX) 指令檢查函數(shù)調用,查找每個函數(shù)的所有調用函數(shù),并填充函數(shù)數(shù)據(jù)庫。數(shù)據(jù)庫本身被安排為Adelson-Velsky和Landis自平衡搜索樹,以便快速搜索和瀏覽。

編譯器優(yōu)化可能會通過直接分支到被調用的函數(shù)來扭曲某些函數(shù)調用。這些函數(shù)沒有任何堆棧分配,因此解析引擎需要足夠智能才能檢測這些編譯器優(yōu)化。

函數(shù)瀏覽器

稱為 Java 幀 (JFrames) 的簡單圖形用戶界面 (GUI) 界面為函數(shù)調用瀏覽選擇感興趣的函數(shù)。選擇一個函數(shù)將顯示兩個幀,一個用于“被調用方/被調用函數(shù)”,另一個用于“被調用自”函數(shù)。這些幀顯示具有進一步節(jié)點擴展的分層樹結構,如圖 3、4、5 和 6 所示。

瀏覽器圖形用戶界面

函數(shù)列表顯示所有可用函數(shù),使您能夠選擇感興趣的函數(shù)來瀏覽參考文獻。

pYYBAGN7GnGAFEtaAAGDeVrYZL4756.png

圖 3:功能列表顯示

可以在樹中進一步向下導航以查看函數(shù)調用的可能性。

pYYBAGN7GnmAbdZbAAGZpw-V-lU508.png

圖 4:調用的函數(shù)引用

poYBAGN7GoOAOxy6AACo9zMJYR0595.png

圖 5:從引用調用

poYBAGN7GoqAaUSlAAIveYQZPpM392.png

圖 6:功能列表 GUI

簡化軟件

通過使用此方法從二進制映像派生靜態(tài)調用流程圖,您現(xiàn)在可以更好地了解軟件功能流,并補充源代碼瀏覽,以更深入地了解軟件實現(xiàn)。最重要的是,這種方法可以加快流程并使故障排除軟件更簡單。

審核編輯:郭婷

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關注

    關注

    48

    文章

    7396

    瀏覽量

    150653
  • 嵌入式
    +關注

    關注

    5053

    文章

    18918

    瀏覽量

    300881
  • 物聯(lián)網(wǎng)

    關注

    2899

    文章

    43812

    瀏覽量

    369232
收藏 人收藏

    評論

    相關推薦

    Windows 11預覽版安裝受阻,微軟提示更新設備瀏覽器

    該提示翻譯如下:由于安全性考慮,您的設備瀏覽器未能順利連接至認證服務。若您確非惡意行為者,請嘗試更新相關設備瀏覽器,以獲取完整使用體驗
    的頭像 發(fā)表于 03-05 14:29 ?906次閱讀

    嵌入式工程師需要掌握哪些技術?

    Bluetooth、Wi-Fi和LoRa等的了解也是有益的。 5. 調試和故障排除能力:嵌入式系統(tǒng)開發(fā)中經(jīng)常會遇到各種問題和錯誤。因此,具備良好的調試和故障
    發(fā)表于 03-04 16:38

    如何通過瀏覽器訪問Web頁面進行固件更新的方法?

    如果電腦沒有安裝 TIA PORTAL 軟件,但是 CPU 之前激活了 Web 服務功能,可以通過電腦聯(lián)網(wǎng) CPU,然后打開瀏覽器瀏覽到 CPU 的方式
    的頭像 發(fā)表于 02-25 14:51 ?1251次閱讀

    嵌入式軟件設計的原則分享

    嵌入式軟件開發(fā)如果具有更好的閱讀性、擴展性以及維護性,就需要考慮很多因素。今天給大家分享幾個嵌入式軟件設計的原則。
    發(fā)表于 02-25 10:54 ?577次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>設計的原則分享

    嵌入式軟件開發(fā)應該掌握哪些知識?

    兩個部分組成,其中嵌入式軟件是指在嵌入式系統(tǒng)中運行的程序,用于控制硬件并提供特定的功能和服務。嵌入式軟件應用廣泛,包括汽車、醫(yī)療
    發(fā)表于 02-19 11:23

    嵌入式學習步驟

    語言編寫。但是,有些嵌入式系統(tǒng)也使用其他編程語言,例如Python或Java。 (3).了解硬件:深入了解您要控制的硬件設備的功能和特性。您需要了解嵌入式系統(tǒng)的處理、內存、I/O端口
    發(fā)表于 02-02 15:24

    嵌入式軟件開發(fā)和軟件開發(fā)的區(qū)別

    嵌入式軟件開發(fā)和軟件開發(fā)是兩個不同的概念,它們在一些關鍵方面有著明顯的區(qū)別。嵌入式軟件開發(fā)是指開發(fā)嵌入
    的頭像 發(fā)表于 01-22 15:27 ?2039次閱讀

    嵌入式硬件和軟件哪個好?

    ,如復位電路、常用濾波電路、功放電路、高速信號傳輸線的匹配電路等;故障定位、解決問題的能力;設計文檔的組織編寫技能! 那對于嵌入式軟件工程師來說:
    發(fā)表于 12-05 15:17

    js腳本怎么在瀏覽器中運行

    JavaScript腳本。 一、JavaScript簡介 JavaScript是一種高級的、直譯型的計算機編程語言,用于Web頁面的交互功能。它專門為瀏覽器設計,能夠在瀏覽器中直接運行,而無需編譯
    的頭像 發(fā)表于 11-27 16:46 ?2582次閱讀

    js文件可以直接瀏覽器運行嗎

    載和運行。 在Web開發(fā)中,JS常被用于實現(xiàn)動態(tài)交互效果和頁面邏輯控制。通過將JS代碼嵌入到網(wǎng)頁的HTML文件中,瀏覽器可以在頁面加載過程中自動執(zhí)行JS,實現(xiàn)網(wǎng)頁的動態(tài)效果和用戶交互。 在HTML文件中,可以使用 當瀏覽器解析到
    的頭像 發(fā)表于 11-27 16:45 ?3610次閱讀

    瀏覽器怎么打開javascript

    瀏覽器是一種用于瀏覽和訪問互聯(lián)網(wǎng)頁面的應用程序,而JavaScript是一種常用的網(wǎng)頁編程語言,用于給網(wǎng)頁添加交互和動態(tài)效果。本文將詳細探討如何在瀏覽器中打開JavaScript,并解釋
    的頭像 發(fā)表于 11-26 11:25 ?2251次閱讀

    瀏覽器需要支持javascript怎么解決

    JavaScript是一種流行的腳本語言,用于對網(wǎng)頁進行動態(tài)交互和功能增強。幾乎所有現(xiàn)代瀏覽器都支持JavaScript,但在某些情況下,用戶可能需要采取措施來確保瀏覽器支持JavaScript
    的頭像 發(fā)表于 11-26 11:23 ?4646次閱讀

    瀏覽器支持javascript怎么設置

    和JavaScript之間的關系。瀏覽器是一個軟件應用程序,用于解析和渲染網(wǎng)頁。它可以是桌面應用程序(例如Chrome,F(xiàn)irefox和Safari)或移動應用程序(例如Safari和Chrome
    的頭像 發(fā)表于 11-26 11:22 ?1321次閱讀

    瀏覽器javascript被禁用怎么解開

    JavaScript是一種前端開發(fā)語言,通過運行在瀏覽器中的腳本來給網(wǎng)頁增加動態(tài)交互和功能性。然而,有時候我們可能會遇到瀏覽器禁用JavaScript的情況,這會導致某些網(wǎng)頁無法正常運行或功能受限
    的頭像 發(fā)表于 11-26 11:21 ?1.8w次閱讀

    嵌入式軟件的開發(fā)流程

    電子發(fā)燒友網(wǎng)站提供《嵌入式軟件的開發(fā)流程.doc》資料免費下載
    發(fā)表于 11-17 14:39 ?0次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>軟件</b>的開發(fā)流程