Drivers
如何知道驅動模組的程式碼流程?
我正在研究 Linux 設備驅動程序,我主要關注的是 wifi 驅動程序。我想知道當我插入我的設備時程式碼是如何流動的。也許,我可以做一些事情,比如
printk
在每個函式中添加一行。我擁有的設備受ath9k_htc
驅動程序支持。我想對驅動程式碼進行一些更改以用於學習目的。理解linux中驅動模組程式碼流的正確或通用方法是什麼?
當我想這樣做時,我使用
ftrace
框架。首先掛載特殊文件系統:mount -t tracefs nodev /sys/kernel/tracing
(作為root;你應該成為所有這些的root,無論如何你都會以root身份做所有事情,擁有root shell比使用更容易
sudo
)。然後切換到該目錄:
cd /sys/kernel/tracing
它包含一個
README
提供簡短摘要的基礎知識。為了探索函式呼叫,我使用了函式圖跟踪器,function_graph
在available_tracers
. 確定您感興趣的功能,例如ath9k_htc_tx
,並設置它們echo ath9k_htc_tx > set_graph_function
您可以附加其他功能,請確保
>>
在第一個功能之後使用。您可以看到配置的功能cat set_graph_function
當您寫入 時
set_graph_function
,會根據正在執行的核心檢查該函式;如果找不到該函式,則寫入將失敗,因此您會立即知道是否最終不會跟踪任何內容。設置功能後,啟用跟踪器:
echo function_graph > current_tracer
然後看
trace
文件。要再次禁用跟踪器,echo nop > current_tracer
或通過向其寫入 0 或 1 來翻轉
tracing_on
(0 禁用跟踪,1 重新啟用它)。