“Unknown symbol in module” on module insertion despite EXPORT_SYMBOL

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-02 07:14:23

问题


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.


回答1:


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.



来源:https://stackoverflow.com/questions/32392611/unknown-symbol-in-module-on-module-insertion-despite-export-symbol

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!