Drivers

如何知道驅動模組的程式碼流程?

  • February 29, 2020

我正在研究 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_graphavailable_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 重新啟用它)。

引用自:https://unix.stackexchange.com/questions/570188