views:

402

answers:

3

Hello all!

I'm writing a kernel module which depends on one existing kernel module. I'm building my module out of the tree (as an external module). How can I declare the dependency, so that it is recognized by depmod?

Thank you all

Luis

A: 

You don't need to. depmod will run through all modules in the current /lib/modules/ directory and build it's dependency tree based on unresolved symbols.

By default it will assume any symbol not provided by another module is in the kernel however you can use the -e/-F options to check that is the case too.

stsquad
+1  A: 

While not entirely satisfying, the best I've come up with to make modprobe work is either adding an entry to modules.dep

# tail -1 modules.dep
../../../../home/ctuffli/mymod/mymod.ko: kernel/drivers/scsi/libsas/libsas.ko kernel/drivers/scsi/scsi_transport_sas.ko

or alternatively, symbolically linking the out-of-tree module to /lib/modules/ and let depmod figure out the dependencies

# ln -s /home/ctuffli/mymod/mymod.ko /lib/modules/2.6.31-19-server/kernel/drivers/scsi/
# depmod
# grep mymod /lib/modules/2.6.31-19-server/modules.dep
kernel/drivers/scsi/mymod.ko: kernel/drivers/scsi/libsas/libsas.ko kernel/drivers/scsi/scsi_transport_sas.ko
ctuffli
A: 

Hello all

First of all, thank you very much for your quick replies.

The problem is that when I build my module, the generated ".mod.c" file contains the entry "depends=" with no dependencies. Thus, this dependency (or absence of dependencies) information is passed to the .ko (at least I think so). When I run depmod, the kernel has no way of knowing that my module depends on another one.

The module works perfecly. But when I install it without installing previously its dependencies, I get a segmentation fault.

Greetings, and thanks

Luis

luis tavares
In the example I gave, mymod.ko depends on two other loadable modules (libsas, scsi_transport_sas). I build this driver out-of-tree and also have the empty "depends=" entry in mymod.mod.c, and depmod is able to figure out the two dependencies if you symbolically link the module into the usual `/lib/modules/\`uname -r\`/kernel/drivers` location.
ctuffli