我正在编写一个内核模块,它将检查VFS中的某些内容。在这个模块中,我需要使用内核API“putname”,它定义为:
#ifdef CONFIG_AUDITSYSCALL
void putname(const char *name)
{
if (unlikely(!audit_dummy_context()))
audit_putname(name);
else
__putname(name);
}
EXPORT_SYMBOL(putname);
当我在Fedora 18中使用内核3.6.10进行编译时,一切正常,模块工作正常,但是当我将其切换到内核3.11.4时。编译器给了我一个警告“putname未定义”,当我用“__putname”替换“putname”时,可以编译内核模块,但是当它运行时,会出现问题。回溯显示它在__putname中。有没有人可以帮我解决这个问题? 谢谢
答案 0 :(得分:1)
请参阅杰夫的commit #91a27b2a756784714e924e5e854b919273082d26:
此补丁集转换getname()/ putname()接口以返回结构而不是字符串。现在,struct只跟踪内核空间中的字符串和原始userland指针。
接口在v3.6之后立即更改。所以你必须考虑到这一变化,重新编写代码。