Linux内核调试的方式以及工具学习
內核的調試, 其本質是內核空間與用戶空間的數據交換, 內核開發者們提供了多樣的形式來完成這一功能;
1 內核調試工具
工具和描述
debugfs等文件系統
?? ?提供了 procfs, sysfs, debugfs以及 relayfs 來與用戶空間進行數據交互, 尤其是 debugfs, 這是內核開發者們實現的專門用來調試的文件系統接口. 其他的工具或者接口, 多數都依賴于 debugfs.
printk
?? ?強大的輸出系統, 沒有什么邏輯上的bug是用PRINT解決不了的
ftrace以及其前端工具trace-cmd等
?? ?內核提供了 ftrace 工具來實現檢查點, 事件等的檢測, 這一框架依賴于 debugfs, 他在 debugfs 中的 tracing 子系統中為用戶提供了豐富的操作接口, 我們可以通過該系統對內核實現檢測和分析. 功能雖然強大, 但是其操作并不是很簡單, 因此使用者們為實現了 trace-cmd 等前端工具, 簡化了 ftrace 的使用.
kprobe以及更強大的systemtap
?? ?內核中實現的 krpobe 通過類似與代碼劫持一樣的技巧, 在內核的代碼或者函數執行前后, 強制加上某些調試信息, 可以很巧妙的完成調試工作, 這是一項先進的調試技術, 但是仍然有覺得它不夠好, 劫持代碼需要用驅動的方式編譯并加載, 能不能通過腳本的方式自動生成劫持代碼并自動加載和收集數據, 于是systemtap 出現了. 通過 systemtap 用戶只需要編寫腳本, 就可以完成調試并動態分析內核
kgdb && kgtp
?? ?KGDB 是大名鼎鼎的內核調試工具, KGTP則通過驅動的方式強化了 gdb的功能, 諸如tracepoint, 打印內核變量等.
perf
?? ?erf Event是一款隨 inux內核代碼一同發布和維護的性能診斷工具, 核社區維護和發展. Perf 不僅可以用于應用程序的性能統計分析, 也可以應用于內核代碼的性能統計和分析. 得益于其優秀的體系結構設計, 越來越多的新功能被加入 Perf, 使其已經成為一個多功能的性能統計工具集
LTTng?? ?LTTng 是一個 Linux 平臺開源的跟蹤工具, 是一套軟件組件, 可允許跟蹤 Linux 內核和用戶程序, 并控制跟蹤會話(開始/停止跟蹤、啟動/停止事件 等等).
2 用戶空間與內核空間數據交換的文件系統
內核中有三個常用的偽文件系統: procfs, debugfs和sysfs.
文件系統?? ?描述
procfs?? ?The proc filesystem is a pseudo-filesystem which provides an interface to kernel data structures.
sysfs?? ?The filesystem for exporting kernel objects.
debugfs?? ?Debugfs exists as a simple way for kernel developers to make information available to user space.
relayfs?? ?A significantly streamlined version of relayfs was recently accepted into the -mm kernel tree.
? ? 它們都用于Linux內核和用戶空間的數據交換, 但是適用的場景有所差異:
? ? procfs 歷史最早, 最初就是用來跟內核交互的唯一方式, 用來獲取處理器、內存、設備驅動、進程等各種信息.
? ? sysfs 跟 kobject 框架緊密聯系, 而 kobject 是為設備驅動模型而存在的, 所以 sysfs 是為設備驅動服務的.
? ? debugfs 從名字來看就是為 debug 而生, 所以更加靈活.
? ? relayfs 是一個快速的轉發 (relay) 數據的文件系統, 它以其功能而得名. 它為那些需要從內核空間轉發大量數據到用戶空間的工具和應用提供了快速有效的轉發機制.
?
總結
以上是生活随笔為你收集整理的Linux内核调试的方式以及工具学习的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CentOS 3.7 安装Linux k
- 下一篇: Linux shell 编程入门 - 使