[英]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.