2011-04-23 219 views
13

我感興趣的剖析Linux內核的模塊。我試着這樣說:剖析Linux內核模塊

  1. 建有CONFIG_PROFILING=y
  2. 內核啓動完畢後用profile=2
  3. 內核重置分析器通過echo 123 > /proc/profile
  4. 該模塊已成功通過專用守護
  5. 運行一個裝通過特定ioctl調用使用該模塊的用戶空間應用程序。測試應用程序按預期工作,所以模塊工作正常。
  6. 閱讀使用readprofile -p /proc/profile -m System.map其中System.app與內核而產生的剖析信息。

到目前爲止,一切都很好。幾乎所有的東西都按預期工作。什麼但是沒有不的工作,是我沒有得到我的模塊任何信息,即沒有從模塊的任何功能的提及。

但是,轉念一想,我remebered我使用CONFIG_PROFILING=y忘記重新編譯模塊。

所以,我的問題是:難道模塊沒有在分析日誌顯示出來,因爲它沒有被編譯的CONFIG_PROFILING=y或者是有一些其他比較明顯的原因,我不知道的?

如果人們不禁要問,爲什麼我問,而不是試圖它馬上,那是因爲,我不能在家裏做它,我寧願喜歡聽什麼見地會說之前,我再次訪問代碼。

+1

我不知道。我認爲你對這個問題的猜測是正確的,因爲具有分析信息的常見方式是讓編譯器對代碼進行檢測。但是,我想知道,oprofile不適合您的目的嗎? - http://oprofile.sourceforge.net/about/ – Omnifarious 2011-04-23 09:08:43

+0

謝謝! Oprofile似乎有一個相當乏味的安裝,我不確定它是否支持ARM CPU。 – 2011-04-23 09:12:18

+1

自從我在* n * x內核中做了任何事情已經很長時間了,但它必須可以在像GDB這樣的調試器下運行你的模塊。然後你可以使用[這個基本技術](http://stackoverflow.com/questions/375913/what-c​​an-i-use-to-profile-c-code-in-linux/378024#378024)。 – 2011-04-23 20:14:45

回答

6

這似乎並不可能以這種方式進行概要分析模塊,它們被加載動態,這意味着它們是從System.map文件中找不到

一個解決方案是構建司機到內核。不幸的是,這並不總是可行的,因爲系統可能被設計爲僅在驅動器內置於模塊中運行。

0

我建議使用oprofile應該工作。

+3

不幸的是,我需要在ARM上使用它。 – 2011-04-26 10:23:07