2016-01-24 65 views
2

我知道Kprobes可以用來探測任何內核函數。但通過它的文件後,我意識到它主要是一種被動的實體。它只是將一個探測器放在執行序列的中間。如何調用任何內核函數?

但是如果我想直接調用任何內核函數而不打擾執行順序會怎麼樣。

我該如何做到這一點?

更新

注:我想調用我的內核模塊內部,而不是從任何用戶空間應用的任何核函數。

+1

'我想調用我的內核module'內的任何核函數 - 所以,做那。在內核模塊中調用內核函數有什麼問題? – Tsyvarev

+0

我可以在模塊中調用任何內核函數而不包含與該函數相關的任何頭文件嗎? –

+0

是的,但你可能會說錯了 – Soren

回答

1

如果我想調用任何內核函數直接

並非所有的功能都可以直接使用最少的。

在您的情況下調用內核函數時請考慮以下幾點。從不同模塊

  • 內核功能如果使用EXPORT_SYMBOL系列的宏出口的前提下使用。
  • static函數不能直接在該文件之外使用。

函數的定義(i2c_smbus_read_byte_data)
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L2689

這裏使用
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L350

2

不能簡單地從居於用戶空間的應用程序調用內核函數。系統調用是用戶空間中唯一可以請求內核服務的功能。

要直接調用內核函數,如果您對內核編程感興趣,則必須實現內核模塊。 This是一個起點。

編輯


正如你所指定的,你想從一個模塊中調用內核函數,那麼就一點問題都沒有。只需按照我上面發佈的文檔鏈接進行操作即可。

+0

是的,我只建立一個內核模塊。所以如果我想從我的模塊調用任何其他內核函數,我將如何實現它?我知道用戶空間應用程序不能直接調用內核函數。 –

+0

我看到了,我猜Kprobes已經實現在內核模塊中使用了,不是嗎?我嘗試重新闡述我的答案。 –

相關問題