簡體   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