首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

使用 Red Hat Crash Utility 從 RAM Dump 提取 ftrace 日志

     編輯:Java 綜合教學

實戰:用 Crash Utility 分析 RAM Dump 中的 ftrace 記錄

嵌入式 Linux 開發中,通過 crash 工具離線分析內存轉儲(RAM Dump)是定位內核問題的關鍵手段。本文記錄從源碼編譯 crash、構建擴展模塊、載入 trace.so 到導出 ftrace 日志的完整流程,針對 ARM64 架構。

環境準備

  • 目標板:ARM64,已獲取 vmlinux(帶調試符號的內核映像)與多個 DDRCS*.BIN 內存映像文件。
  • 宿主機:Ubuntu/Debian,安裝 build-essential、libncurses5-dev、zlib1g-dev 等編譯依賴。

步驟 1:下載並編譯 Crash Utility

# 1. 獲取源碼
wget https://people.redhat.com/anderson/crash-7.3.0.tar.gz  # 或最新版
tar xf crash-7.3.0.tar.gz
cd crash-7.3.0

# 2. 編譯主程序(目標架構 ARM64)
make target=ARM64

# 若無網絡無法自動下載 gdb,手動下載 gdb-7.6.tar.gz 放入目錄再編譯
# 3. 編譯擴展模塊
make extensions target=ARM64

步驟 2:安裝 trace-cmd(宿主機分析工具)

sudo apt-get update && sudo apt-get install trace-cmd

步驟 3:啟動 Crash 會話載入內存映像

假設物理內存佈局:DDRCS0.BIN 對應 0x40000000,DDRCS1.BIN 對應 0x80000000。

crash vmlinux DDRCS0.BIN@0x40000000,DDRCS1.BIN@0x80000000

進入交互式提示符 crash>。

步驟 4:載入 trace.so 擴展模塊

crash> extend trace.so

模塊路徑通常在 ./extensions/trace.so(編譯生成)。載入成功後可用 help trace 查看子命令。

步驟 5:導出 ftrace 報告

crash> trace report

將輸出重定向到文件:

crash> trace report > ftrace_log.txt

常見問題與技巧

  • 多個 BIN 文件:按物理地址順序用逗號分隔,地址必須為 DDR Bank 起始物理地址。
  • 符號缺失:確保 vmlinux 未 strip,包含 CONFIG_DEBUG_INFO=y 編譯。
  • 內核版本不匹配:crash 版本需與目標內核主版本一致(如 4.19、5.4、5.10)。
  • 擴展模塊編譯失敗:檢查 trace.c 是否包含對應內核版本的 trace_clock、ftrace_array 等結構定義。

進階:過濾與分析

# 僅顯示特定 CPU
crash> trace report -c 0

# 顯示原始環形緩衝區
crash> trace raw

# 導出 perf 格式供 perf script 分析
crash> trace perf > perf.data

總結

Crash Utility + trace.so 是嵌入式 Linux 內核離線分析的利器。掌握 vmlinux+RAM Dump 載入、擴展模塊編譯、ftrace 導出全流程,能大幅縮短定位死機、性能抖動、中風暴等疑難問題的時間。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved