繁体   English   中英

使用insmod时未定义的符号

[英]Undefined symbol when using insmod

我写了一个linux内核模块,但是当我运行这个命令insmod ./...ko ,内核发布了一个错误:未定义的符号......

之后,我搜索了很长时间,所有的解决方案都是使用EXPORT_SYMBOL() ,所以我把它写在内核代码中并重建内核。 有趣的事情发生了,内核说exports duplicate symbol ... (owned by kernel) 似乎符号不止一次导出,但如果是这样,为什么我以前不能使用它?

这是我模块中的相关代码:

extern struct task_struct *find_task_by_vpid(pid_t nr);
target_tsk = pid == -1 ? current : find_task_by_vpid(pid);

我将内核文件linux/sched.h为以下格式:

extern struct task_struct *find_task_by_vpid(pid_t nr);
EXPORT_SYMBOL_GPL(find_task_by_vpid);

符号导出( EXPORT_SYMBOL )应在文件( .c )中执行,而不是在文件( .h )中执行。

这是因为导出符号是(某些其他)符号的定义 ,而头文件不适用于此类事物。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM