1

I have 2 modules mod_1.ko & mod_2.ko with fun_1() & fun_2() defined in them respectively. I exported the functions and want to use fun_1 & fun_2 in mod_2.ko & mod_1.ko. How do I proceed..?

kami
  • 13
  • 3
  • Go through this link http://stackoverflow.com/questions/17193532/export-symbol-in-kernel-module-undefined-symbol-during-insmod/17680241#17680241 – Gautham Kantharaju Apr 16 '14 at 08:27

1 Answers1

2

If you're using it explicitly (you have call of fun_1 from mod_2.ko and fun_2 from mod_1.ko ) then kernel won't let you load your modules. This is happened because it reads symbol table and look for kernel existing modules - the one you can see in /proc/kallsyms. So mod_1 has fun_2 reference and need mod_2 to be loaded. And mod_2 has fun_1 reference and need mod_1 to be loaded. There you have dependency lock)

I can think of 2 solutions for your problem:

  • Take out fun_1 and fun_2 into separate module that you'll load first.
  • Don't make explicit call to function. Do this implicitly with help of find_symbol. You declare function pointers, then you resolve that pointer in runtime with call to find_symbol and then you call your functions via function pointers.
Alexander Dzyoba
  • 4,009
  • 1
  • 24
  • 29
  • I figured it out in another way... I made use of function pointers in one module and registered function in another module with first module's function pointer. Followed the approach of VFS.. – kami Apr 18 '14 at 09:21