Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"Unknown symbol in module" on module insertion despite EXPORT_SYMBOL

I am trying to compile and insert the r8169 realtek ethernet driver. My kernel version is

ebin@sony:~$ uname -r
4.2.0-rc3-custom

I have the full source of the same in my local disk, which is used to install the current kernel. The module compiles successfully when I run make -C /lib/modules/uname -r/build M=pwdmodules
but when I insert the module, it shows

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

When I grepped through the source, I found

EXPORT_SYMBOL(mii_ethtool_gset);

already exported in the mii.c. So I guess it is not the problem of unexported symbol. Let me know if I have to provide any other info. Please help.

like image 231
ebin Avatar asked Sep 11 '25 02:09

ebin


1 Answers

As Vadim Stupakov said in the comment, Putting the Module.symvers file in the module source directory fixed my issue. From this 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.

As per my understanding, Module.symvers is created on make modules. I missed out that file. When I put the appropriate Module.symvers in the module build directory, the module works as I expected without any errors.

like image 167
ebin Avatar answered Sep 13 '25 05:09

ebin