As of Linux 2.4, you can rename the init and cleanup functions of your modules; they no longer have to be called
init_module()
and cleanup_module()
respectively. This is done with the
module_init()
and module_exit()
macros. These macros are defined in linux/init.h. The only caveat is that your init and cleanup functions must be defined before
calling the macros, otherwise you'll get compilation errors. Here's an example of this technique:
So now we have two real kernel modules under our belt. Adding another module is as simple as this:
Now have a look at linux/drivers/char/Makefile for a real world example. As you can see, some things get hardwired into the kernel (obj-y) but where are all those obj-m gone? Those familiar with shell scripts will easily be able to spot them. For those not, the obj-$(CONFIG_FOO) entries you see everywhere expand into obj-y or obj-m, depending on whether the CONFIG_FOO variable has been set to y or m. While we are at it, those were exactly the kind of variables that you have set in the linux/.config file, the last time when you said make menuconfig or something like that.