Linux kernel 模块中的未知符号
我有一个内核模块,它可能是为2.6xx内核版本编写的。现在,我想将该模块插入内核版本3.1x及以上。我已经调整和更改了代码,显然现在除了下面提到的警告之外,还有编译错误 警告:“do_mmap_pgoff”[/home/abdullah/Downloads/my_mod.ko]未定义 警告:“putname”[/home/abdullah/Downloads/my_mod.ko]未定义 警告:“get_task_cred”[/home/abdullah/Downloads/my_mod.ko]未定义 现在,当我检查kernel Module.symvers时,我没有在其中找到所有三个用于导出的函数。这将导致插入模块时出现致命错误。现在我的问题是:有人知道这些函数的替代方法吗?任何帮助都将不胜感激。下面是一个示例函数,它说明了整个函数太长的情况Linux kernel 模块中的未知符号,linux-kernel,kernel,gnu,kernel-module,Linux Kernel,Kernel,Gnu,Kernel Module,我有一个内核模块,它可能是为2.6xx内核版本编写的。现在,我想将该模块插入内核版本3.1x及以上。我已经调整和更改了代码,显然现在除了下面提到的警告之外,还有编译错误 警告:“do_mmap_pgoff”[/home/abdullah/Downloads/my_mod.ko]未定义 警告:“putname”[/home/abdullah/Downloads/my_mod.ko]未定义 警告:“get_task_cred”[/home/abdullah/Downloads/my_mod.ko]未
int函数_1(常量字符*fname)
{
结构信任*任务信任;
结构文件名*filename=NULL;
filename=getname(uu用户(fname));
task_cred=(struct cred*)get_task_cred(当前);
putname(文件名);
filename=NULL;
返回1;
}
还有另一种方法有点不安全,任何不在生产系统上的人都可以像我一样在内核源文件中导出这些函数首先使用命令“cat/proc/kallsyms | grep”检查是否导出了上述符号。如果可以看到这些符号,则会导出它们,否则不会导出它们,并且无法在模块中使用。我检查了3.10内核源代码,发现get_task_cred()api没有导出。如果没有符号,则意味着您必须使用现有api移植代码。感谢Gautham和Andy的关注,我正在寻找这些函数的替代方法,因为这是我的问题,因为我已经检查了kallsyms。对于do_mmap_pgoff,我找到了另一个仍在搜索的选项(vm_mmap_pgoff)。