2013-10-25 54 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