2017-05-30 54 views
1

當我寫一個Linux內核模塊,但是當我運行此命令insmod ./...ko,內核通告有一個錯誤:未定義的符號...未定義的符號用insmod

在那之後,我搜索了很久,所有的解決方案是使用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); 
+0

請提供您已寫入的示例代碼 –

+2

請提供[最小,完整和可驗證示例](https://stackoverflow.com/help/mcve)。另請參閱:[如何提問](https://stackoverflow.com/help/how-to-ask) –

+0

對不起,我以前認爲我的代碼在這個問題上沒有幫助,我修改了我的問題。 – shinshiner

回答

0

符號出口(EXPORT_SYMBOL)應在進行文件(.c),而不是標頭文件(.h)。

這是因爲導出符號是定義(其他)符號,而頭文件不適合這樣的事情。

+0

非常感謝,我對這個領域知之甚少,我想我應該提高自己的知識。 – shinshiner