2015-09-04 73 views
3

我想編譯並插入r8169 realtek ethernet驅動程序。我的內核版本是儘管EXPORT_SYMBOL模塊插入「模塊中的未知符號」

[email protected]:~$ uname -r 
4.2.0-rc3-custom 

我在我的本地磁盤中有相同的完整源代碼,它用於安裝當前內核。該模塊編譯成功,當我運行make -C /lib/modules/使用uname -r /build M= PWD modules
但是當我插入的模塊,它顯示

[email protected]:~/linux_testing/linux-stable/drivers/net/ethernet/realtek$ sudo insmod r8169.ko 
insmod: ERROR: could not insert module r8169.ko: Unknown symbol in module 
[email protected]:~/linux_testing/linux-stable/drivers/net/ethernet/realtek$ dmesg 
[16717.311216] r8169: Unknown symbol mii_ethtool_gset (err 0) 

當我通過源grepped,我發現

EXPORT_SYMBOL(mii_ethtool_gset); 

已經出口在mii.c。所以我想這不是未引用符號的問題。讓我知道如果我必須提供任何其他信息。請幫忙。

+0

您是否將「Module.symvers」複製到構建目錄中? – RedEyed

+0

@ebin:如果mii被編譯爲模塊,在插入模塊之前需要插入它('sudo modprobe mii')。與'modprobe'不同,'insmod'不會自動加載相關模塊。 – Tsyvarev

+0

@Tsyvarev:我在加載mii模塊後試過。現在,它顯示了錯誤'錯誤:無法插入模塊r8169.ko:無效parameters' dmesg的'[8157.140018] r8169:不同意關於符號mii_ethtool_gset版本 [8157.140027] r8169:未知符號mii_ethtool_gset(ERR -22) ' – ebin

回答

2

正如Vadim Stupakov在評論中所說,將Module.symvers文件放入模塊源目錄中解決了我的問題。從這個documentation

Module versioning is enabled by the CONFIG_MODVERSIONS tag, and is used 
as a simple ABI consistency check. A CRC value of the full prototype 
for an exported symbol is created. When a module is loaded/used, the 
CRC values contained in the kernel are compared with similar values in 
the module. if they are not equal, the kernel refuses to load the 
module. 
Module.symvers contains a list of all exported symbols from a kernel 
build. 

按我的理解,Module.symversmake modules創建。我錯過了那個文件。當我將合適的Module.symvers放入模塊構建目錄中時,該模塊按我預期的方式工作,沒有任何錯誤。

相關問題