Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in kernel/modules. The the address of the all sysbols is in /proc/kallsyms. Only symbols exported by EXPORT_SYMBOL() is listed its CRC information in Module.symvers. So I think the CRC is the key to export a symbol. I do an experiment: ---mdir | |---Mod1 | |---mod1.c | |---Makefile | |---Mod2 |---mod2.c |---Makefile mod1.c define function *void myfunc(void)* and exported by EXPORT_SYMBOL() and the CRC info is showed in Module.symvers. mod2.c reference *myfunc* and compiled successfully. BUT when mod2.ko is insmoded, "unknown symbol" is complained. mod2.ko CAN'T BE INSMOD. I solve this problem by the method in Documentation/kbuild/modules.txt and heard this is a bug from kernel 2.6. Why this bug is not be fixed?
On Fri, Jul 24, 2015 at 11:19 AM, Navy <navych@126.com> wrote:
Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in kernel/modules. The the address of the all sysbols is in /proc/kallsyms. Only symbols exported by EXPORT_SYMBOL() is listed its CRC information in Module.symvers. So I think the CRC is the key to export a symbol. I do an experiment:
---mdir | |---Mod1 | |---mod1.c | |---Makefile | |---Mod2 |---mod2.c |---Makefile
mod1.c define function *void myfunc(void)* and exported by EXPORT_SYMBOL() and the CRC info is showed in Module.symvers. mod2.c reference *myfunc* and compiled successfully. BUT when mod2.ko is insmoded, "unknown symbol" is complained. mod2.ko CAN'T BE INSMOD.
Your Mod1 must be live before you load Mod2. When you load your module, the exported symbols would be present in a separate section in the elf file, you can see that using readelf, something like __ksymtab_. When the module is loaded these symbols are noted so that find_symbol can locate these. When you load a module dependent on those symbols, the load_module function would use the find_symbol to get that symbol. CRC would be checked in check_version after the symbol has been found, even then only if you have CONFIG_MODVERSIONS set in your config.
I solve this problem by the method in Documentation/kbuild/modules.txt and heard this is a bug from kernel 2.6.
Why this bug is not be fixed?
It's a long way from 2.6 now. can you send something about this "bug"?
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- ---P.K.S
On Fri, Jul 24, 2015 at 01:48:57PM +0530, Pranay Srivastava wrote:
On Fri, Jul 24, 2015 at 11:19 AM, Navy <navych@126.com> wrote:
Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in
Why this bug is not be fixed?
It's a long way from 2.6 now. can you send something about this "bug"? Hi Pranay, The detail is below: https://bugzilla.kernel.org/show_bug.cgi?id=12446#c11 Maybe other people think out-of-tree modules should not be supported. I don't know How do the in-tree modules reference other symbols and be insmod without this problem. If you can help me about this, I will deeply grateful.
With in-tree modules, the compilation process can determine dependencies and that's why modprobe works with them (insmod doesn't). How do you want the kernel to know where the symbol comes from? Why load your mod1 and not my mod3 that also defines myfunc()? Who's going to call init_module on your mod1? Where in the filesystem should it look for it? On Fri, Jul 24, 2015 at 3:40 PM, Navy <navych@126.com> wrote:
On Fri, Jul 24, 2015 at 01:48:57PM +0530, Pranay Srivastava wrote:
On Fri, Jul 24, 2015 at 11:19 AM, Navy <navych@126.com> wrote:
Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in
Why this bug is not be fixed?
It's a long way from 2.6 now. can you send something about this "bug"? Hi Pranay, The detail is below: https://bugzilla.kernel.org/show_bug.cgi?id=12446#c11 Maybe other people think out-of-tree modules should not be supported. I don't know How do the in-tree modules reference other symbols and be insmod without this problem. If you can help me about this, I will deeply grateful.
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
On Fri, Jul 24, 2015 at 01:49:42PM +0800, Navy wrote:
Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in kernel/modules. The the address of the all sysbols is in /proc/kallsyms. Only symbols exported by EXPORT_SYMBOL() is listed its CRC information in Module.symvers. So I think the CRC is the key to export a symbol. I do an experiment:
---mdir | |---Mod1 | |---mod1.c | |---Makefile | |---Mod2 |---mod2.c |---Makefile
mod1.c define function *void myfunc(void)* and exported by EXPORT_SYMBOL() and the CRC info is showed in Module.symvers. mod2.c reference *myfunc* and compiled successfully. BUT when mod2.ko is insmoded, "unknown symbol" is complained. mod2.ko CAN'T BE INSMOD.
Use 'modprobe' after "properly" installing the kernel modules to the correct location, and then all will be fine. greg k-h
Hi, This is the place where modprobe comes into play .If you have dependent module the on your module then it is recommended to use modprobe . After compiling your module run : 1. depmod -a 2. modprobe mod1 3. modprobe mod2 And as far as i know CONFIG_MODVERSION is basically for the module signature according to which you can't directly insert a .ko file compiled in another system. On 24 July 2015 at 11:19, Navy <navych@126.com> wrote:
Hi To my understanding, EXPORT_SYMBOL() is used to export a symbol in kernel/modules. The the address of the all sysbols is in /proc/kallsyms. Only symbols exported by EXPORT_SYMBOL() is listed its CRC information in Module.symvers. So I think the CRC is the key to export a symbol. I do an experiment:
---mdir | |---Mod1 | |---mod1.c | |---Makefile | |---Mod2 |---mod2.c |---Makefile
mod1.c define function *void myfunc(void)* and exported by EXPORT_SYMBOL() and the CRC info is showed in Module.symvers. mod2.c reference *myfunc* and compiled successfully. BUT when mod2.ko is insmoded, "unknown symbol" is complained. mod2.ko CAN'T BE INSMOD. I solve this problem by the method in Documentation/kbuild/modules.txt and heard this is a bug from kernel 2.6.
Why this bug is not be fixed?
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
participants (5)
-
Abhishek bist -
Greg KH -
Navy -
Pranay Srivastava -
Tal Shorer