2013-09-01 46 views
3

我想知道在特定場景中執行哪些所有功能。Linux內核中的入口和出口打印

具體我想了解Linux內核中的MMC/SD卡堆棧。

我的想法是把打印這樣的:

pr_info("Entering %s\n", __func__); 

pr_info("Leaving %s\n", __func__); 

所有存在於drivers/mmc/的功能。

但是這是一項單調乏味的工作。

有沒有更好的方法來做到這一點?

注意:我研究了使用由gcc __cyg_profile_func_enter__cyg_profile_func_exit提供的儀器功能的可能性。

這些儀器功能完美適用於小型模塊。

但是這些函數可以在Linux內核中使用嗎?或者我們有一些不同的方法呢?

我的環境:代碼將交叉編譯爲Cortex A7/A9。

回答

4

你可以使用-finstrument-functions來編譯你想要的源文件。然後你可以在內核的某個文件中自己實現這兩個函數。

需要注意的是:

  1. 你不能編譯包含__cyg_profile_func_enter/exit-finstrument-functions文件(或者,你應該使用__attribute__((no_instrument_function)))。
  2. 函數__cyg_profile_func_enter/exit不得調用使用-finstrument-functions編譯的代碼 - 這將導致無限遞歸。如果他們所做的只是printkprintk以及它調用的低級驅動程序不是以這種方式進行編譯的,那麼您確定。
+0

能否請你解釋/澄清第二點? –

+0

@LeoMessi,現在好多了? – ugoren

+0

但是我在哪裏提到了Makefile中的-finstrument-functions? –