2013-10-25 56 views
2

我正在編寫一個內核模塊來檢查VFS中的某些內容。在這個模塊中,我需要使用的內核API「putname」,其定義爲:當編譯我的內核模塊時出現「WARNING,putname undefined」

#ifdef CONFIG_AUDITSYSCALL 
void putname(const char *name) 
{ 
if (unlikely(!audit_dummy_context())) 
    audit_putname(name); 
else 
    __putname(name); 
} 
EXPORT_SYMBOL(putname); 

當我與內核3.6.10遵守它的Fedora 18,一切都OK,模塊工作正常,但是當我將它切換到內核3.11.4。編譯器給了我一個警告「putname is undefined」,當我將「putname」替換爲「__putname」時,內核模塊可以被編譯,但是當它運行時,會出錯。回溯顯示它在__putname中。有沒有人可以幫助我解決這個問題? 感謝

回答

1

從傑夫見commit #91a27b2a756784714e924e5e854b919273082d26

這個補丁集()/ putname()接口轉換的getName返回一個結構,而不是一個字符串。目前,結構只跟蹤內核空間中的字符串以及原始用戶空間指針。

該界面在v3.6之後立即更改。所以你必須重新考慮你的代碼。

+0

我知道接口已經改變了,但是我試圖通過getname()來得到一個''struct filename *'',但是編譯器會拋出與原始問題相同的錯誤。 – Shubs