嵌入式 Linux 開發中,通過 crash 工具離線分析內存轉儲(RAM Dump)是定位內核問題的關鍵手段。本文記錄從源碼編譯 crash、構建擴展模塊、載入 trace.so 到導出 ftrace 日志的完整流程,針對 ARM64 架構。
vmlinux(帶調試符號的內核映像)與多個 DDRCS*.BIN 內存映像文件。build-essential、libncurses5-dev、zlib1g-dev 等編譯依賴。# 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
sudo apt-get update && sudo apt-get install trace-cmd
假設物理內存佈局:DDRCS0.BIN 對應 0x40000000,DDRCS1.BIN 對應 0x80000000。
crash vmlinux DDRCS0.BIN@0x40000000,DDRCS1.BIN@0x80000000
進入交互式提示符 crash>。
crash> extend trace.so
模塊路徑通常在 ./extensions/trace.so(編譯生成)。載入成功後可用 help trace 查看子命令。
crash> trace report
將輸出重定向到文件:
crash> trace report > ftrace_log.txt
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 導出全流程,能大幅縮短定位死機、性能抖動、中風暴等疑難問題的時間。