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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With