The kerneld feature was introduced during the 1.3 development kernels by Bjorn Ekwall. It allows kernel modules such as device drivers, network drivers and filesystems to be loaded automatically when they are needed, rather than having to do it manually with modprobe or insmod.
And for the more amusing aspects, although these are not (yet ?) integrated with the standard kernel:
It can be setup to run a user-program instead of the default screen blanker, thus letting you use any program as a screen-saver.
Similar to the screen-blanker support, you can also change the standard console beep into something completely different.
kerneld consists of two components:
Support in the Linux kernel for sending requests to a daemon requesting a module for a certain task.
A user-space daemon that can figure out what modules must be loaded to fulfill the request from the kernel.
Both components must be working for the kerneld support to function; it is not enough that only one or the other has been setup.
There are some good reasons for using kerneld. The ones I will mention are mine, others have other reasons.
If you have to build kernels for several systems that only differ slightly - different kind of network card, for instance - then you can build a single kernel and some modules, instead of having to build individual kernels for each system.
Modules are easier for developers to test. You don't need to reboot the system to load and unload the driver; this applies to all modules, not just kerneld-loaded ones.
It cuts down on the kernel memory usage leaving more memory available for applications. Memory used by the kernel is never swapped out, so if you have 100Kb worth of unused drivers compiled into your kernel, they are simply wasting RAM.
Some of the things I use, the ftape floppy-tape driver, for instance, or iBCS, are only available as modules, but I don't want to bother with loading and unloading them whenever I need them.
People making Linux distributions don't have to build 284 different boot images: Each user loads the drivers he needs for just his hardware. Most modern Linux distributions will detect your hardware and will only load those modules actually required.
Of course, there are also reasons why you may not want to use it. If you prefer to have just one kernel image file with all of your drivers built in, you are reading the wrong document.
The support in the Linux kernel was introduced with Linux 1.3.57. If you have an earlier kernel version, you will need to upgrade if you want the kerneld support. The current Linux kernel sources can be found at most Linux FTP archive sites including:
The user-space daemon is included with the modules package. These are normally available from the same place as the kernel sources
If you want to try module-loading with the latest development kernels, you should use the newer modutils package and not the modules. Always check the Documentation/Changes file in the kernel sources for the minimum required version number for your kernel image. Also see about the problems with modules and 2.1 kernels.