Many parts of the kernel are well served as a module
    (dynamically-loadable parts of the kernel).  Using the
    module_init() and
    module_exit() macros it is easy to write code
    without #ifdefs which can operate both as a module or built into
    the kernel.
   
    The module_init() macro defines which
    function is to be called at module insertion time (if the file is
    compiled as a module), or at boot time: if the file is not
    compiled as a module the module_init() macro
    becomes equivalent to __initcall(), which
    through linker magic ensures that the function is called on boot.
   
The function can return a negative error number to cause module loading to fail (unfortunately, this has no effect if the module is compiled into the kernel). This function is called in user context with interrupts enabled, so it can sleep.